PySpark SQL 函數的 when(~)
方法用於根據給定條件將 PySpark DataFrame 列的值更新為其他值。
注意
when(~)
方法通常與 otherwise(~)
方法結合使用來實現if-else 邏輯。請參閱下麵的示例以進行說明。
參數
1.condition
| Column
| optional
布爾值 Column
表達式。請參閱下麵的示例以進行說明。
2. value
| any
| optional
條件為真時要映射到的值。
返回值
PySpark 列 (pyspark.sql.column.Column
)。
例子
考慮以下PySpark DataFrame:
df = spark.createDataFrame([["Alex", 20], ["Bob", 24], ["Cathy", 22]], ["name", "age"])
df.show()
+-----+---+
| name|age|
+-----+---+
| Alex| 20|
| Bob| 24|
|Cathy| 22|
+-----+---+
使用when和otherwise實現if-else邏輯
要將名稱 Alex
重命名為 Doge
,將其他名稱重命名為 Eric
:
import pyspark.sql.functions as F
df.select(F.when(df.name == "Alex", "Doge").otherwise("Eric")).show()
+-----------------------------------------------+
|CASE WHEN (name = Alex) THEN Doge ELSE Eric END|
+-----------------------------------------------+
| Doge|
| Eric|
| Eric|
+-----------------------------------------------+
請注意我們如何使用 otherwise(~)
方法為不滿足條件的情況設置值。
不使用其他方法的情況
請注意,如果不包含 otherwise(~)
方法,則任何不滿足 if 條件的值都將被分配為 null
:
df.select(F.when(df.name == "Alex", "Doge")).show()
+-------------------------------------+
|CASE WHEN (name = Alex) THEN Doge END|
+-------------------------------------+
| Doge|
| null|
| null|
+-------------------------------------+
指定多個條件
使用管道和 & 運算符
我們可以使用&
(和)和|
(或)組合條件,如下所示:
df.withColumn("name", F.when((df.name == "Alex") & (df.age > 10), "Doge").otherwise("Eric")).show()
+----+---+
|name|age|
+----+---+
|Doge| 20|
|Eric| 24|
|Eric| 22|
+----+---+
鏈接when方法
when(~)
方法可以像這樣鏈接:
df.select(F.when(df.name == "Alex", "Doge")
.when(df.name == "Bob", "Zebra")
.otherwise("Eric")).show()
+----------------------------------------------------------------------------+
|CASE WHEN (name = Alex) THEN Doge WHEN (name = Bob) THEN Zebra ELSE Eric END|
+----------------------------------------------------------------------------+
| Doge|
| Zebra|
| Eric|
+----------------------------------------------------------------------------+
根據原值設置新值
要根據原始值設置新值:
import pyspark.sql.functions as F
df.select(F.when(df.age > 15, df.age + 30)).show()
+----------------------------------------+
|CASE WHEN (age > 15) THEN (age + 30) END|
+----------------------------------------+
| 50|
| 54|
| 52|
+----------------------------------------+
使用別名
默認情況下,新的列標簽是複雜的:
import pyspark.sql.functions as F
df.select(F.when(df.name == "Alex", "Doge").otherwise("Eric")).show()
+-----------------------------------------------+
|CASE WHEN (name = Alex) THEN Doge ELSE Eric END|
+-----------------------------------------------+
| Doge|
| Eric|
| Eric|
+-----------------------------------------------+
要分配新列,隻需使用alias(~)
方法:
import pyspark.sql.functions as F
df.select(F.when(df.name == "Alex", "Doge").otherwise("Eric").alias("new_name")).show()
+--------+
|new_name|
+--------+
| Doge|
| Eric|
| Eric|
+--------+
相關用法
- Python PySpark SQL Functions split方法用法及代碼示例
- Python PySpark SQL Functions repeat方法用法及代碼示例
- Python PySpark SQL Functions explode方法用法及代碼示例
- Python PySpark SQL Functions concat方法用法及代碼示例
- Python PySpark SQL Functions instr方法用法及代碼示例
- Python PySpark SQL Functions count_distinct方法用法及代碼示例
- Python PySpark SQL Functions dayofmonth方法用法及代碼示例
- Python PySpark SQL Functions date_add方法用法及代碼示例
- Python PySpark SQL Functions array方法用法及代碼示例
- Python PySpark SQL Functions concat_ws方法用法及代碼示例
- Python PySpark SQL Functions col方法用法及代碼示例
- Python PySpark SQL Functions translate方法用法及代碼示例
- Python PySpark SQL Functions dayofweek方法用法及代碼示例
- Python PySpark SQL Functions expr方法用法及代碼示例
- Python PySpark SQL Functions regexp_extract方法用法及代碼示例
- Python PySpark SQL Functions regexp_replace方法用法及代碼示例
- Python PySpark SQL Functions round方法用法及代碼示例
- Python PySpark SQL Functions countDistinct方法用法及代碼示例
- Python PySpark SQL Functions date_format方法用法及代碼示例
- Python PySpark SQL Functions collect_list方法用法及代碼示例
- Python PySpark SQL Functions lit方法用法及代碼示例
- Python PySpark SQL Functions upper方法用法及代碼示例
- Python PySpark SQL Functions length方法用法及代碼示例
- Python PySpark SQL Functions dayofyear方法用法及代碼示例
- Python PySpark SQL Functions trim方法用法及代碼示例
注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 PySpark SQL Functions | when method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。