Condividi tramite


sql

Restituisce un oggetto DataFrame che rappresenta il risultato della query specificata.

Quando si specifica kwargs, questo metodo formatta la stringa specificata usando il formattatore standard Python. Il metodo associa i parametri denominati ai valori letterali SQL o ai parametri posizionali da args. I parametri denominati e posizionali non possono essere misti nella stessa query SQL.

Sintassi

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

Parametri

Parametro Tipo Descrizione
sqlQuery str Stringa di query SQL.
args dict o list, facoltativo Dizionario dei nomi dei parametri per Python oggetti o un elenco di oggetti Python che possono essere convertiti in espressioni letterali SQL. Usare :param_name la sintassi per i parametri denominati o ? per i parametri posizionali nella stringa di query.
**kwargs opzionale Variabili a cui è possibile fare riferimento nella query usando Python sintassi del formattatore , ad esempio {varname}. Questa funzionalità è sperimentale e instabile.

Restituzioni

DataFrame

Note

In Spark Classic viene risolta immediatamente una visualizzazione temporanea a cui si fa riferimento in spark.sql . In Spark Connect viene analizzato in modo differito, quindi se una vista viene eliminata, modificata o sostituita dopo spark.sql, l'esecuzione potrebbe non riuscire o generare risultati diversi.

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