最近我开始使用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中所有支持的文件格式。阅读官方文档