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


Python PySpark SQL Functions when方法用法及代码示例


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

相关用法


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