Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Vrátí reprezentaci DataFrame výsledku daného dotazu.
Pokud je zadán kwargs, tato metoda formátuje daný řetězec pomocí Python standardního formátovače. Metoda sváže pojmenované parametry s literály SQL nebo pozičními parametry z args. Pojmenované a poziční parametry nelze kombinovat ve stejném dotazu SQL.
Syntaxe
sql(sqlQuery, args=None, **kwargs)
Parametry
| Parameter | Typ | Description |
|---|---|---|
sqlQuery |
str | Řetězec dotazu SQL. |
args |
diktování nebo seznam, volitelné | Slovník názvů parametrů pro Python objekty nebo seznam objektů Python, které lze převést na literály SQL. Použijte :param_name syntaxi pro pojmenované parametry nebo ? pro poziční parametry v řetězci dotazu. |
**kwargs |
volitelný | Proměnné, na které lze v dotazu odkazovat pomocí syntaxe formátovacího Python (například {varname}). Tato funkce je experimentální a nestabilní. |
Návraty
DataFrame
Poznámky
V klasickém Sparku se okamžitě vyřeší dočasné zobrazení, na spark.sql které se odkazuje. V Nástroji Spark Connect se líně analyzuje, takže pokud se zobrazení zahodí, upraví nebo nahradí po spark.sql, spuštění může selhat nebo vygenerovat různé výsledky.
Příklady
# 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|
# +---+---+---+