当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。