Dataframe Pyspark数据帧将条件添加到'reduce(add,(F.col(x)` 让我们考虑一个数据文件 df>代码>如下: df.show() +-----+-----+-----+-----+-----+ |col A | val|u 1 | val|u 2 | val|u 3 | val|u 4| +-----+-----+-----+-----+-----+ |城市1 | 100 | 100 | 200 | 100| |城市2 | 200 | 300 | 300 | 100| |城市1 | 100 | 100 | 100 | 100| |城市2 | 500 | 200 | 200 | 200| +-----+-----+-----+-----+-----+

Dataframe Pyspark数据帧将条件添加到'reduce(add,(F.col(x)` 让我们考虑一个数据文件 df>代码>如下: df.show() +-----+-----+-----+-----+-----+ |col A | val|u 1 | val|u 2 | val|u 3 | val|u 4| +-----+-----+-----+-----+-----+ |城市1 | 100 | 100 | 200 | 100| |城市2 | 200 | 300 | 300 | 100| |城市1 | 100 | 100 | 100 | 100| |城市2 | 500 | 200 | 200 | 200| +-----+-----+-----+-----+-----+,dataframe,pyspark,functools,Dataframe,Pyspark,Functools,如果我想在列val_I中添加值并将它们放入新的列sum中,我可以执行以下操作: 从functools导入reduce 从操作员导入添加 val_cols=[x代表x,如果x中的'val'为df.columns] df.withColumn('sum',(减少(添加,(F.col(x)表示valu cols中的x))).show() +-----+-----+-----+-----+-----+----+ |col A | val|u 1 | val|u 2 | val|u 3 | val|u 4

如果我想在列val_I中添加值并将它们放入新的列sum中,我可以执行以下操作:

从functools导入reduce
从操作员导入添加
val_cols=[x代表x,如果x中的'val'为df.columns]
df.withColumn('sum',(减少(添加,(F.col(x)表示valu cols中的x))).show()
+-----+-----+-----+-----+-----+----+
|col A | val|u 1 | val|u 2 | val|u 3 | val|u 4 | sum|
+-----+-----+-----+-----+-----+----+
|城市1 | 100 | 100 | 200 | 100 | 500|
|城市2 | 200 | 300 | 300 | 100 | 900|
|城市1 | 100 | 100 | 100 | 100 | 400|
|城市2 | 500 | 200 | 200 | 200 | 1100|
+-----+-----+-----+-----+-----+----+
如何在
(reduce(add)(F.col(x)…
参数中添加条件?例如,如果我只想包含超过200的值。我尝试了这个方法

df.withColumn('sum',(如果F.col(x)>200,则减少(添加,(F.col(x)表示值中的x))。show()
但出现以下错误:

ValueError:无法将列转换为布尔值:在构建数据帧布尔表达式时,请使用“&”表示“and”,使用“|”表示“or”,使用“~”表示“not”


这可以通过使用
f构造条件来实现。当(…)。否则(…)
提前:

functools.reduce(
  operator.add, 
  [f.when(f.col(c) > 200, f.col(c)).otherwise(f.lit(0)) for c in df1.columns]
)