當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python pyspark sql用法及代碼示例

本文簡要介紹 pyspark.pandas.sql 的用法。

用法:

pyspark.pandas.sql(query: str, index_col: Union[str, List[str], None] = None, globals: Optional[Dict[str, Any]] = None, locals: Optional[Dict[str, Any]] = None, **kwargs: Any) → pyspark.pandas.frame.DataFrame

執行 SQL 查詢並將結果作為pandas-on-Spark DataFrame 返回。

此函數還支持通過將 Python 變量(局部變量、全局變量和參數)包在花括號中來在 SQL 語句中嵌入它們。有關詳細信息,請參閱示例部分。

除了局部變量、全局變量和參數之外,該函數還將嘗試確定程序當前是否在 IPython(或 Jupyter)環境中運行,並從該環境中導入變量。變量與全局變量具有相同的優先級。

支持以下變量類型:

  • string

  • int

  • float

  • 列表、元組、上述類型的範圍

  • pandas-on-Spark DataFrame

  • pandas-on-Spark係列

  • Pandas DataFrame

參數

querystr

SQL 查詢

index_colstr 或 str 列表,可選

在 Spark 中用於表示 pandas-on-Spark 的索引的列名。 pandas-on-Spark 中的索引名稱被忽略。默認情況下,索引總是丟失。

注意

如果要保留索引,請顯式使用 DataFrame.reset_index() ,並將其傳遞給帶有 index_col 參數的 sql 語句。

例如,

>>> psdf = ps.DataFrame({"A": [1, 2, 3], "B":[4, 5, 6]}, index=['a', 'b', 'c'])
>>> psdf_reset_index = psdf.reset_index()
>>> ps.sql("SELECT * FROM {psdf_reset_index}", index_col="index")
... 
       A  B
index
a      1  4
b      2  5
c      3  6

對於多索引,

>>> psdf = ps.DataFrame(
...     {"A": [1, 2, 3], "B": [4, 5, 6]},
...     index=pd.MultiIndex.from_tuples(
...         [("a", "b"), ("c", "d"), ("e", "f")], names=["index1", "index2"]
...     ),
... )
>>> psdf_reset_index = psdf.reset_index()
>>> ps.sql("SELECT * FROM {psdf_reset_index}", index_col=["index1", "index2"])
... 
               A  B
index1 index2
a      b       1  4
c      d       2  5
e      f       3  6

另請注意,索引名稱應與現有名稱匹配。

globals字典,可選

全局變量字典,如果由用戶明確設置

locals字典,可選

局部變量的字典,如果由用戶明確設置

kwargs

用戶可能希望手動設置的可在查詢中引用的其他變量

返回

pandas-on-Spark DataFrame

例子

調用內置 SQL 函數。

>>> ps.sql("select * from range(10) where id > 7")
   id
0   8
1   9

查詢還可以通過用花括號括起來來引用局部變量或參數:

>>> bound1 = 7
>>> ps.sql("select * from range(10) where id > {bound1} and id < {bound2}", bound2=9)
   id
0   8

您還可以用大括號括起來DataFrame來直接查詢它。請注意,執行此操作時,索引(如果有)會自動成為頂級列。

>>> mydf = ps.range(10)
>>> x = range(4)
>>> ps.sql("SELECT * from {mydf} WHERE id IN {x}")
   id
0   0
1   1
2   2
3   3

查詢也可以任意嵌套在函數中:

>>> def statement():
...     mydf2 = ps.DataFrame({"x": range(2)})
...     return ps.sql("SELECT * from {mydf2}")
>>> statement()
   x
0  0
1  1

在連接操作中混合 pandas-on-Spark 和 pandas DataFrames。請注意,索引已被刪除。

>>> ps.sql('''
...   SELECT m1.a, m2.b
...   FROM {table1} m1 INNER JOIN {table2} m2
...   ON m1.key = m2.key
...   ORDER BY m1.a, m2.b''',
...   table1=ps.DataFrame({"a": [1,2], "key": ["a", "b"]}),
...   table2=pd.DataFrame({"b": [3,4,5], "key": ["a", "b", "b"]}))
   a  b
0  1  3
1  2  4
2  2  5

此外,還可以使用 Series 進行查詢。

>>> myser = ps.Series({'a': [1.0, 2.0, 3.0], 'b': [15.0, 30.0, 45.0]})
>>> ps.sql("SELECT * from {myser}")
                    0
0     [1.0, 2.0, 3.0]
1  [15.0, 30.0, 45.0]

相關用法


注:本文由純淨天空篩選整理自spark.apache.org大神的英文原創作品 pyspark.pandas.sql。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。