欢迎访问宙启技术站
智能推送

深入学习PySpark中的when()函数和otherwise()函数的用法

发布时间:2024-01-18 19:12:08

在PySpark中,when()函数和otherwise()函数是用于对DataFrame进行条件判断和数据转换的重要函数。它们通常与select()或withColumn()等函数一起使用,允许我们根据条件动态修改或筛选数据。

首先,让我们先了解一下when()函数的用法。when()函数可以接受一个或多个条件表达式,通常是列对象的逻辑表达式。当条件为真时,then()函数定义了返回的结果;否则,当没有匹配的条件时,可以使用otherwise()函数定义默认值。

下面是一个简单的例子,我们将使用when()函数和otherwise()函数根据年龄的不同对员工进行分类。

from pyspark.sql.functions import when

# 创建示例数据
data = [
  ("John", 35),
  ("Alice", 40),
  ("Mike", 28),
  ("Emily", 50)
]
df = spark.createDataFrame(data, ["name", "age"])

# 使用when()函数和otherwise()函数对年龄进行分类
df = df.withColumn("age_range", when(df.age < 30, "Young")
                                 .when(df.age >= 30, "Middle-aged")
                                 .otherwise("Unknown"))

# 显示结果
df.show()

运行以上代码,输出结果将会是:

+-----+---+------------+
| name|age|   age_range|
+-----+---+------------+
| John| 35|Middle-aged |
|Alice| 40|Middle-aged |
| Mike| 28|       Young|
|Emily| 50|     Unknown|
+-----+---+------------+

可以看到,我们根据不同的年龄范围为每个员工添加了一个新的列"age_range"。根据条件判断,当年龄小于30时,将其分类为"Young";当年龄大于等于30时,分类为"Middle-aged";其他情况下,分类为"Unknown"。

接下来,让我们来学习一下otherwise()函数的使用方法。otherwise()函数用于定义当所有条件都不满足时的默认值。当无条件匹配到时,可以使用otherwise()函数返回对应的结果。

以下示例将帮助我们更好地理解otherwise()函数的用法。

from pyspark.sql.functions import when

# 创建示例数据
data = [
  ("John", 35),
  ("Alice", 40),
  ("Mike", None),
  ("Emily", 50)
]
df = spark.createDataFrame(data, ["name", "age"])

# 使用when()函数和otherwise()函数对空值进行处理
df = df.withColumn("age_range", when(df.age < 30, "Young")
                                 .when(df.age >= 30, "Middle-aged")
                                 .otherwise("Unknown"))

# 显示结果
df.show()

运行以上代码,输出结果将会是:

+-----+----+------------+
| name| age|   age_range|
+-----+----+------------+
| John|  35|Middle-aged |
|Alice|  40|Middle-aged |
| Mike|null|     Unknown|
|Emily|  50|     Unknown|
+-----+----+------------+

我们可以看到,当存在空值时,otherwise()函数可以帮助我们定义一个默认值"Unknown",以消除null值对结果的影响。

总结来说,when()函数和otherwise()函数是PySpark中非常强大且灵活的函数,它们可以在DataFrame中进行条件判断和数据转换。使用这两个函数,我们可以根据条件动态地修改数据或筛选数据,并根据需要设定默认值。无论是对于数据清洗、数据预处理还是特征工程,这两个函数都是非常有用的工具。希望本文对你有所帮助!