sql

DataFrame Возвращает результат заданного запроса.

Если указан параметр kwargs, этот метод форматирует указанную строку с помощью стандартного средства форматирования Python. Метод привязывает именованные параметры к литералам SQL или позиционных параметров из args. Именованные и позиционные параметры не могут быть смешанными в одном запросе SQL.

Синтаксис

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

Параметры

Параметр Тип Описание
sqlQuery str Строка запроса SQL.
args дикт или список, необязательный Словарь имен параметров для объектов Python или список объектов Python, которые можно преобразовать в литеральные выражения SQL. Используйте :param_name синтаксис именованных параметров или ? позиционных параметров в строке запроса.
**kwargs optional Переменные, на которые можно ссылаться в запросе с помощью синтаксиса форматирования Python (например, {varname}). Эта функция является экспериментальной и нестабильной.

Возвраты

DataFrame

Примечания

В Spark Classic временный вид, на который spark.sql ссылается ссылка, немедленно разрешается. В Spark Connect анализируется безумно, поэтому если представление удалено, изменено или заменено после spark.sqlэтого, выполнение может завершиться ошибкой или создать различные результаты.

Примеры

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