PySpark DataFrame 的selectExpr(~)
方法根据指定的 SQL 表达式返回新的DataFrame。
参数
1. *expr
| string
SQL 表达式。
返回值
一个新的 PySpark 数据帧。
例子
考虑以下PySpark DataFrame:
df = spark.createDataFrame([["Alex", 20], ["Bob", 30], ["Cathy", 40]], ["name", "age"])
df.show()
+-----+---+
| name|age|
+-----+---+
| Alex| 20|
| Bob| 30|
|Cathy| 40|
+-----+---+
在 PySpark DataFrame 中使用 SQL 表达式选择数据
要获取新的 DataFrame,其中 name
列的值是大写的:
df.selectExpr("upper(name) AS upper_name", "age * 2").show()
+----------+---------+
|upper_name|(age * 2)|
+----------+---------+
| ALEX| 40|
| BOB| 60|
| CATHY| 80|
+----------+---------+
我们应该使用 selectExpr(~)
而不是 select(~)
来提取列,同时对它们执行一些简单的转换 - 就像我们在这里所做的那样。
注意
pyspark.sql.functions
库中存在类似的方法 expr(~)
。 expr(~)
也接受 SQL 表达式作为参数,但不同之处在于返回类型是 PySpark Column
。 selectExpr(~)
和 expr(~)
的以下用法是等效的:
from pyspark.sql import functions as F
# The below is the same as df.selectExpr("upper(name)").show()
df.select(F.expr("upper(name)")).show()
+-----------+
|upper(name)|
+-----------+
| ALEX|
| BOB|
| CATHY|
+-----------+
一般来说,您应该使用 selectExpr(~)
而不是 expr(~)
,因为:
-
您不必导入
pyspark.sql.functions
库。 -
语法更短更清晰
解析更复杂的 SQL 表达式
考虑以下PySpark DataFrame:
df = spark.createDataFrame([['Alex',20],['Bob',60]], ['name','age'])
df.show()
+----+---+
|name|age|
+----+---+
|Alex| 20|
| Bob| 60|
+----+---+
我们可以使用AND
和LIKE
等经典SQL子句来制定更复杂的表达式:
df.selectExpr('age < 30 AND name LIKE "A%" as result').show()
+------+
|result|
+------+
| true|
| false|
+------+
在这里,我们检查 age
小于 30
并且 name
以字母 A
开头的行。
请注意,我们可以像这样实现相同的逻辑:
col = ((df.age < 30) & (F.col('name').startswith('A'))).alias('result')
df.select(col).show()
+------+
|result|
+------+
| true|
| false|
+------+
我个人更喜欢使用selectExpr(~)
,因为语法更清晰,对于熟悉 SQL 的人来说意义也很直观。
检查 PySpark 列中是否存在值
selectExpr(~)
的另一个应用是检查 PySpark 列中是否存在值。请在这里查看食谱。
相关用法
- Python Pandas DataFrame select_dtypes方法用法及代码示例
- Python PySpark DataFrame select方法用法及代码示例
- Python Pandas DataFrame set_axis方法用法及代码示例
- Python Pandas DataFrame set_index方法用法及代码示例
- Python Pandas DataFrame sem方法用法及代码示例
- Python Pandas DataFrame sample方法用法及代码示例
- Python Pandas DataFrame swaplevel方法用法及代码示例
- Python PySpark DataFrame sampleBy方法用法及代码示例
- Python PySpark DataFrame show方法用法及代码示例
- Python Pandas DataFrame stack方法用法及代码示例
- Python Pandas DataFrame shift方法用法及代码示例
- Python Pandas DataFrame sort_index方法用法及代码示例
- Python Pandas DataFrame size属性用法及代码示例
- Python Pandas DataFrame swapaxes方法用法及代码示例
- Python PySpark DataFrame sort方法用法及代码示例
- Python PySpark DataFrame sample方法用法及代码示例
- Python Pandas DataFrame sub方法用法及代码示例
- Python Pandas DataFrame sum方法用法及代码示例
- Python Pandas DataFrame std方法用法及代码示例
- Python PySpark DataFrame summary方法用法及代码示例
- Python Pandas DataFrame shape属性用法及代码示例
- Python Pandas DataFrame sort_values方法用法及代码示例
- Python Pandas DataFrame slice_shift方法用法及代码示例
- Python Pandas DataFrame squeeze方法用法及代码示例
- Python Pandas DataFrame empty属性用法及代码示例
注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 PySpark DataFrame | selectExpr method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。