sql

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