如何在 pyspark 中对 spark 数据框中的多列求和?

新手上路,请多包涵

我有一个我想总结的列名列表

columns = ['col1','col2','col3']

如何添加这三个并将其放入新列中? (以自动方式,以便我可以更改列列表并获得新结果)

带有我想要的结果的数据框:

 col1   col2   col3   result
 1      2      3       6

原文由 Manrique 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

尝试这个:

 df = df.withColumn('result', sum(df[col] for col in df.columns))

df.columns 将是来自 df 的列列表。

原文由 Mayank Porwal 发布,翻译遵循 CC BY-SA 4.0 许可协议

[长话短说;博士,]

你可以这样做:

 from functools import reduce
from operator import add
from pyspark.sql.functions import col

df.na.fill(0).withColumn("result" ,reduce(add, [col(x) for x in df.columns]))

解释:

df.na.fill(0) 部分用于处理数据中的空值。如果您没有任何空值,则可以跳过它并改为执行此操作:

 df.withColumn("result" ,reduce(add, [col(x) for x in df.columns]))

如果你有列的静态列表,你可以这样做:

 df.withColumn("result", col("col1") + col("col2") + col("col3"))

但是,如果您不想键入整个列列表,则需要迭代生成短语 col("col1") + col("col2") + col("col3") 。为此,您可以使用 reduce 方法和 add 函数来获取:

 reduce(add, [col(x) for x in df.columns])

这些列一次添加两列,因此您将得到 col(col("col1") + col("col2")) + col("col3") 而不是 col("col1") + col("col2") + col("col3") 。但是效果是一样的。

col(x) 确保您得到 col(col("col1") + col("col2")) + col("col3") 而不是简单的字符串连接(生成 ( col1col2col3 )。

原文由 Dileep Kumar Patchigolla 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题