Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mengembalikan yang DataFrame mewakili hasil kueri yang diberikan.
Ketika kwargs ditentukan, metode ini memformat string yang diberikan menggunakan formatter standar Python. Metode ini mengikat parameter bernama ke literal SQL atau parameter posisi dari args. Parameter bernama dan posisi tidak dapat dicampur dalam kueri SQL yang sama.
Sintaksis
sql(sqlQuery, args=None, **kwargs)
Parameter-parameternya
| Parameter | Tipe | Deskripsi |
|---|---|---|
sqlQuery |
str | String kueri SQL. |
args |
dict atau list, opsional | Kamus nama parameter ke objek Python, atau daftar objek Python yang dapat dikonversi ke ekspresi harfiah SQL. Gunakan :param_name sintaks untuk parameter bernama atau ? untuk parameter posisi dalam string kueri. |
**kwargs |
fakultatif | Variabel yang dapat dirujuk dalam kueri menggunakan sintaks Python formatter (misalnya, {varname}). Fitur ini bersifat eksperimental dan tidak stabil. |
Pengembalian Barang
DataFrame
Catatan
Di Spark Classic, tampilan sementara yang dirujuk di spark.sql segera diselesaikan. Di Spark Connect, tampilan dianalisis dengan malas, jadi jika tampilan dihilangkan, dimodifikasi, atau diganti setelah spark.sql, eksekusi mungkin gagal atau menghasilkan hasil yang berbeda.
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|
# +---+---+---+