Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Retourne un DataFrame représentant le résultat de la requête donnée.
Lorsque kwargs est spécifié, cette méthode met en forme la chaîne donnée à l’aide du formateur Python standard. La méthode lie les paramètres nommés aux littéraux SQL ou aux paramètres positionnels de args. Les paramètres nommés et positionnels ne peuvent pas être mélangés dans la même requête SQL.
Syntaxe
sql(sqlQuery, args=None, **kwargs)
Paramètres
| Paramètre | Type | Description |
|---|---|---|
sqlQuery |
str | Chaîne de requête SQL. |
args |
dict ou list, facultatif | Dictionnaire de noms de paramètres pour Python objets, ou une liste d’objets Python qui peuvent être convertis en expressions littérales SQL. Utilisez :param_name la syntaxe des paramètres nommés ou ? des paramètres positionnels dans la chaîne de requête. |
**kwargs |
optionnel | Variables qui peuvent être référencées dans la requête à l’aide de Python syntaxe de formateur (par exemple, {varname}). Cette fonctionnalité est expérimentale et instable. |
Retours
DataFrame
Remarques
Dans Spark Classic, une vue temporaire référencée spark.sql est résolue immédiatement. Dans Spark Connect, il est analysé de manière différée. Par conséquent, 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|
# +---+---+---+