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


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