SQL

Retorna a DataFrame que representa o resultado da consulta dada.

Quando kwargs é especificado, este método formata a cadeia dada usando o Python formatador padrão. O método associa parâmetros nomeados a literais SQL ou parâmetros posicionais a partir de args. Parâmetros nomeados e posicionais não podem ser misturados na mesma consulta SQL.

Sintaxe

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

Parâmetros

Parâmetro Tipo Descrição
sqlQuery str String de consulta SQL.
args Ditto ou lista, opcional Um dicionário de nomes de parâmetros para objetos Python, ou uma lista de objetos Python que podem ser convertidos para expressões literais SQL. Use :param_name a sintaxe para parâmetros nomeados ou ? para parâmetros posicionais na cadeia de consulta.
**kwargs optional Variáveis que podem ser referenciadas na consulta usando Python sintaxe de formateamento (por exemplo, {varname}). Esta característica é experimental e instável.

Devoluções

DataFrame

Notes

No Spark Classic, uma vista temporária referenciada em spark.sql é resolvida imediatamente. No Spark Connect, é analisado de forma preguiçosa, por isso, se uma vista for eliminada, modificada ou substituída após spark.sql, a execução pode falhar ou gerar resultados diferentes.

Exemplos

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