如何在PySpark中有效地求和多个列



最近我开始使用PySpark,它是DataFrames。我的情况是,我有大约1800万张唱片和大约50个专栏。我想得到每一列的总和,所以我使用:

df_final = df.select([f.sum(c) for c in df.columns])
df_final.collect()

但我的问题是,当我这样做的时候,我的整个代码重新划分为只有一个分区,并且我在收集时遇到了效率问题和内存不足的问题。

我读到它的行为是这样的,因为它需要把groupBy的每个键都放在一个执行器中,因为我对整列进行求和,所以我实际上不需要groupBy,但我不知道如何实现它。

有什么更有效/更快的方法吗?

建议对少量数据应用collect((,因为它使用了太多内存。你可以阅读这篇文章。

将输出写入文件,而不是collect((。

df.write.csv('mycsv.csv')

编辑:

  • 镶木地板将提供更好的性能和火花
  • 探索spark中所有支持的文件格式。阅读官方文档

最新更新