sql

指定したクエリの結果を表す DataFrame を返します。

kwargs が指定されている場合、このメソッドは、Python標準フォーマッタを使用して、指定された文字列を書式設定します。 このメソッドは、名前付きパラメーターを SQL リテラルまたは位置指定パラメーターに argsからバインドします。 名前付きパラメーターと位置指定パラメーターを同じ SQL クエリで混在させることはできません。

構文

sql(sqlQuery, args=None, **kwargs)

パラメーター

パラメーター タイプ 説明
sqlQuery str SQL クエリ文字列。
args dict または list、省略可能 オブジェクトをPythonするパラメーター名のディクショナリ、または SQL リテラル式に変換できるPythonオブジェクトの一覧。 名前付きパラメーターには :param_name 構文を使用し、クエリ文字列内の位置指定パラメーターには ? を使用します。
**kwargs 任意 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|
# +---+---+---+