SQL
Renvoie un DataFrame représentant le résultat de la query donnée.
Lorsque kwargs est spécifié, cette méthode formate la chaîne donnée à l'aide de l'outil de formatage Python standard. La méthode lie les paramètres nommés aux littéraux SQL ou aux paramètres positionnels de args. Les parameters nommés et positionnels ne peuvent pas être mélangés dans la même SQL query.
Syntaxe
sql(sqlQuery, args=None, **kwargs)
parameter
parameter | Type | Description |
|---|---|---|
| str | Chaîne de query SQL. |
| dictionnaire ou liste, facultatif | Un dictionnaire de noms de paramètres vers des objets Python, ou une liste d'objets Python qui peuvent être convertis en expressions littérales SQL. Utilisez la syntaxe |
| Facultatif | Variables qui peuvent être référencées dans la query à l'aide de la syntaxe de l'outil de formatage Python (par exemple, |
Renvoie
DataFrame
Notes
Dans Spark Classic, une vue temporaire référencée dans spark.sql est résolue immédiatement. Dans Spark Connect, il est analysé de manière paresseuse, donc si une vue est supprimée, modifiée ou remplacée après spark.sql, l'exécution peut échouer ou générer des résultats différents.
Exemples
# 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|
# +---+---+---+