Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Returnerar ett DataFrame som representerar resultatet av den angivna frågan.
När kwargs anges formaterar den här metoden den angivna strängen med hjälp av Python standardformaterare. Metoden binder namngivna parametrar till SQL-literaler eller positionsparametrar från args. Namngivna parametrar och positionsparametrar kan inte blandas i samma SQL-fråga.
Syntax
sql(sqlQuery, args=None, **kwargs)
Parameters
| Parameter | Type | Beskrivning |
|---|---|---|
sqlQuery |
str | SQL-frågesträng. |
args |
diktering eller lista, valfritt | En ordlista med parameternamn för att Python objekt eller en lista över Python objekt som kan konverteras till SQL-literaluttryck. Använd :param_name syntax för namngivna parametrar eller ? för positionsparametrar i frågesträngen. |
**kwargs |
optional | Variabler som kan refereras till i frågan med hjälp av Python formateringssyntax (till exempel {varname}). Den här funktionen är experimentell och instabil. |
Retur
DataFrame
Notes
I Spark Classic löses en tillfällig vy som refereras till i spark.sql omedelbart. I Spark Connect analyseras den lazily, så om en vy tas bort, ändras eller ersätts efter spark.sqlkan körningen misslyckas eller generera olika resultat.
Exempel
# Execute a basic SQL query.
spark.sql("SELECT * FROM range(10) where id > 7").show()
# +---+
# | id|
# +---+
# | 8|
# | 9|
# +---+
# Use Python formatter variables.
spark.sql(
"SELECT * FROM range(10) WHERE id > {bound1} AND id < {bound2}", bound1=7, bound2=9
).show()
# +---+
# | id|
# +---+
# | 8|
# +---+
# Use named parameters with the : prefix.
from pyspark.sql.functions import create_map, lit
mydf = spark.createDataFrame([(1, 4), (2, 4), (3, 6)], ["A", "B"])
spark.sql(
"SELECT *, element_at(:m, 'a') AS C FROM {df} WHERE {df[B]} > :minB",
{"minB": 5, "m": create_map(lit('a'), lit(1))}, df=mydf).show()
# +---+---+---+
# | A| B| C|
# +---+---+---+
# | 3| 6| 1|
# +---+---+---+
# Use positional parameters marked by ?.
from pyspark.sql.functions import array
spark.sql(
"SELECT *, element_at(?, 1) AS C FROM {df} WHERE {df[B]} > ? and ? < {df[A]}",
args=[array(lit(1), lit(2), lit(3)), 5, 2], df=mydf).show()
# +---+---+---+
# | A| B| C|
# +---+---+---+
# | 3| 6| 1|
# +---+---+---+