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


Python PySpark DataFrame selectExpr方法用法及代码示例


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|
+----+---+

我们可以使用ANDLIKE等经典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 列中是否存在值。请在这里查看食谱。

相关用法


注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 PySpark DataFrame | selectExpr method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。