gpt4 book ai didi

pyspark - 如何使用pyspark在when条件中使用for循环?

转载 作者:行者123 更新时间:2023-12-02 10:11:22 30 4
gpt4 key购买 nike

我正在尝试检查何时和其他条件下的多个列值是否为0。我们的 Spark 数据框包含从 1 到 11 的列,需要检查它们的值。目前我的代码如下所示:-

df3 =df3.withColumn('Status', when((col("1") ==0)|(col("2") ==0)|(col("3") ==0)| (col("4") ==0) |(col("5") ==0)|(col("6") ==0)|(col("7") ==0)| (col("8") ==0)|(col("9") ==0)|(col("10") ==0)| (col("11") ==0) ,'Incomplete').otherwise('Complete'))

如何通过仅使用 for 循环而不是这么多 or 条件来实现此目的

最佳答案

我提出了一个更加Pythonic的解决方案。使用functools.reduceoperator.or_

import operator
import functools

colnames = [str(i+1) for i in range(11)]
df1 = spark._sc.parallelize([
[it for it in range(11)],
[it for it in range(1,12)]]
).toDF((colnames))

df1.show()
+---+---+---+---+---+---+---+---+---+---+---+
| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| 11|
+---+---+---+---+---+---+---+---+---+---+---+
| 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10|
| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| 11|
+---+---+---+---+---+---+---+---+---+---+---+

cond_expr = functools.reduce(operator.or_, [(f.col(c) == 0) for c in df1.columns])

df1.withColumn('test', f.when(cond_expr, f.lit('Incomplete')).otherwise('Complete')).show()
+---+---+---+---+---+---+---+---+---+---+---+----------+
| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| 11| test|
+---+---+---+---+---+---+---+---+---+---+---+----------+
| 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10|Incomplete|
| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| 11| Complete|
+---+---+---+---+---+---+---+---+---+---+---+----------+

这样您就不需要定义任何函数、计算字符串表达式或使用 python lambda。希望这可以帮助。

关于pyspark - 如何使用pyspark在when条件中使用for循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58948966/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com