SQL

Gibt ein DataFrame Zurück, das das Ergebnis der angegebenen Abfrage darstellt.

Wenn kwargs angegeben wird, formatiert diese Methode die angegebene Zeichenfolge mithilfe des Python Standardformatierers. Die Methode bindet benannte Parameter an SQL-Literale oder Positionsparameter von args. Benannte und positionale Parameter können nicht in derselben SQL-Abfrage gemischt werden.

Syntax

sql(sqlQuery, args=None, **kwargs)

Parameter

Parameter Typ Beschreibung
sqlQuery str SQL-Abfragezeichenfolge.
args Diktat oder Liste, optional Ein Wörterbuch mit Parameternamen für Python Objekte oder eine Liste von Python Objekten, die in SQL-Literalausdrücke konvertiert werden können. Verwenden Sie :param_name die Syntax für benannte Parameter oder ? für Positionsparameter in der Abfragezeichenfolge.
**kwargs optional Variablen, auf die in der Abfrage mithilfe Python Formatierersyntax verwiesen werden kann (z. B. {varname}). Dieses Feature ist experimentell und instabil.

Rückkehr

DataFrame

Hinweise

In Spark Classic wird sofort eine temporäre Ansicht aufgelöst, auf die spark.sql verwiesen wird. In Spark Connect wird sie lazily analysiert. Wenn also eine Ansicht gelöscht, geändert oder ersetzt spark.sqlwird, kann die Ausführung fehlschlagen oder unterschiedliche Ergebnisse generieren.

Beispiele

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