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