SQL

DataFrame Zwraca wynik danego zapytania.

Po określeniu kwargs ta metoda formatuje dany ciąg przy użyciu standardowego formatowania Python. Metoda wiąże nazwane parametry z literałami SQL lub parametrami pozycyjnymi z argsklasy . Parametry nazwane i pozycyjne nie mogą być mieszane w tym samym zapytaniu SQL.

Składnia

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

Parametry

Parameter Typ Opis
sqlQuery str Ciąg zapytania SQL.
args dict lub list, opcjonalnie Słownik nazw parametrów do Python obiektów lub lista obiektów Python, które można przekonwertować na wyrażenia literału SQL. Użyj :param_name składni dla nazwanych parametrów lub ? parametrów pozycyjnych w ciągu zapytania.
**kwargs opcjonalny Zmienne, do których można odwoływać się w zapytaniu przy użyciu składni formatowania Python (na przykład {varname}). Ta funkcja jest eksperymentalna i niestabilna.

Zwroty

DataFrame

Notatki

W wersji klasycznej platformy Spark widok tymczasowy, do których odwołuje się element , spark.sql jest natychmiast rozpoznawany. W programie Spark Connect jest ona z opóźnieniem analizowana, więc jeśli widok zostanie porzucony, zmodyfikowany lub zastąpiony po spark.sql, wykonanie może zakończyć się niepowodzeniem lub wygenerować różne wyniki.

Examples

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