PySpark:withColumn()具有两个条件和三个结果

user2205916:

我正在使用Spark和PySpark。我正在尝试实现与以下伪代码等效的结果:

df = df.withColumn('new_column', 
    IF fruit1 == fruit2 THEN 1, ELSE 0. IF fruit1 IS NULL OR fruit2 IS NULL 3.)

我正在尝试在PySpark中执行此操作,但是我不确定语法。有指针吗?我调查了一下,expr()但无法正常工作。

请注意,这df是一个pyspark.sql.dataframe.DataFrame

0323:

有几种有效的方法可以实现此目的。让我们从必需的导入开始:

from pyspark.sql.functions import col, expr, when

您可以IF在expr中使用Hive 函数:

new_column_1 = expr(
    """IF(fruit1 IS NULL OR fruit2 IS NULL, 3, IF(fruit1 = fruit2, 1, 0))"""
)

when+ otherwise

new_column_2 = when(
    col("fruit1").isNull() | col("fruit2").isNull(), 3
).when(col("fruit1") == col("fruit2"), 1).otherwise(0)

最后,您可以使用以下技巧:

from pyspark.sql.functions import coalesce, lit

new_column_3 = coalesce((col("fruit1") == col("fruit2")).cast("int"), lit(3))

带有示例数据:

df = sc.parallelize([
    ("orange", "apple"), ("kiwi", None), (None, "banana"), 
    ("mango", "mango"), (None, None)
]).toDF(["fruit1", "fruit2"])

您可以按以下方式使用它:

(df
    .withColumn("new_column_1", new_column_1)
    .withColumn("new_column_2", new_column_2)
    .withColumn("new_column_3", new_column_3))

结果是:

+------+------+------------+------------+------------+
|fruit1|fruit2|new_column_1|new_column_2|new_column_3|
+------+------+------------+------------+------------+
|orange| apple|           0|           0|           0|
|  kiwi|  null|           3|           3|           3|
|  null|banana|           3|           3|           3|
| mango| mango|           1|           1|           1|
|  null|  null|           3|           3|           3|
+------+------+------------+------------+------------+

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

布尔值有两个可能的值。是否存在具有三个可能值的类型?

带有一个,两个和三个按钮的Android Alert对话框

具有三个按钮和三个结果的Inno Setup MsgBox

具有三个条件的索引/匹配

计算一个,两个和三个连续项的总和的更好方法

if elseif具有三个条件的语句,其中第二个条件在两个数字之间

如何创建一个在Ruby中随机排列的具有三个0和两个1的数组?

如何将三个具有多个值的表联接到另外两个表上

带有两个条件的pySpark withColumn

Ifelse()在R中具有三个条件

如何将两个javascript函数与具有条件的第三个函数合并?

Bigquery脚本IF具有两个条件(IF和IF)

带有三个条件的pyspark df.withColumn

Python:具有三个类的新变量的条件

对两个edittext求和,并在第三个中得到结果

PHP While循环仅适用于三个结果中的前两个?

当连接三个表时,MySQL不返回任何内容。两个表在第三个表中具有外键。怎么了?

Sql中的复杂分组,具有针对单个表和联接的两个或三个组条件

我们如何合并两个具有分组条件和两个条件的查询的结果

检查三个procmail条件中是否至少有两个为真

Java:具有主要方法的两个类访问相同的第三个类

连接两个表+第三个表作为条件列

按第三个表的条件过滤的两个表的分组计数查询

if 语句具有三个结果

如何使用循环和索引从两个现有向量创建第三个向量?

连接以第三个表为条件的两个表

在循环中只得到三个结果中的两个以显示数组元素

具有相同变量的两个/三个内部循环的复杂性

具有两列和三个卡片 ui 元素的相同高度