返回一个 DataFrame 表示给定查询的结果。
指定 kwargs 时,此方法使用Python标准格式化程序设置给定字符串的格式。 该方法将命名参数绑定到 SQL 文本或位置参数。args 命名参数和位置参数不能在同一 SQL 查询中混合。
Syntax
sql(sqlQuery, args=None, **kwargs)
参数
| 参数 | 类型 | 说明 |
|---|---|---|
sqlQuery |
str | SQL 查询字符串。 |
args |
听写或列表,可选 | 用于Python对象的参数名称字典,或可转换为 SQL 文本表达式的Python对象列表。 对命名参数或:param_name查询字符串中的位置参数使用?语法。 |
**kwargs |
optional | 可以使用Python格式化程序语法(例如,{varname})在查询中引用的变量。 此功能是实验性的,不稳定。 |
退货
DataFrame
备注
在 Spark 经典版中,立即解析引用的 spark.sql 临时视图。 在 Spark Connect 中,会延迟分析它,因此,如果在执行后 spark.sql删除、修改或替换视图,则执行可能会失败或生成不同的结果。
示例
# 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|
# +---+---+---+