Compartilhar via


sql

Retorna um DataFrame que representa o resultado da consulta fornecida.

Quando kwargs é especificado, esse método formata a cadeia de caracteres fornecida usando o Python formatador padrão. O método associa parâmetros nomeados a literais SQL ou parâmetros posicionais 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 Cadeia de caracteres de consulta SQL.
args ditado ou lista, opcional Um dicionário de nomes de parâmetros para Python objetos ou uma lista de objetos Python que podem ser convertidos em expressões literais sql. Use :param_name a sintaxe para parâmetros nomeados ou ? para parâmetros posicionais na cadeia de caracteres de consulta.
**kwargs opcional Variáveis que podem ser referenciadas na consulta usando Python sintaxe do formatador (por exemplo, {varname}). Esse recurso é experimental e instável.

Devoluções

DataFrame

Observações

No Spark Classic, uma exibição temporária referenciada é spark.sql resolvida imediatamente. No Spark Connect, ele é analisado lentamente, portanto, se uma exibição for descartada, modificada ou substituída após spark.sql, a execução poderá 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|
# +---+---+---+