我们是否需要内存中的所有数据才能在Spark

我正在尝试对类似这样的大数据(大约50TB)进行分组操作

df_grouped = df.groupby(df['col1'],df['col2']).sum('col3')

我正在Pyspark上使用dataframe API,并在具有12 r5.4xlarge机器的EMR上运行它。这项工作需要很长时间才能完成,最终被OOM杀死。

我的问题是: 在Spark上按分组运行是否有最佳实践? 运行此程序时是否需要所有数据以适合内存?

z86631075 回答:我们是否需要内存中的所有数据才能在Spark

groupBy操作对于如此大的数据集效率不高。 groupBy中的OOM指示可能存在数据偏斜,这是因为groupBy实现会读取内存分区中的所有数据。您可以在https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/RDD.scala#L731

处查看实现
本文链接:https://www.f2er.com/3124530.html

大家都在问