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


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。