sql

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|
# +---+---+---+