我最近在火花中工作,遇到了一些我仍然无法解决的疑问。
假设我有一个100GB的数据集,我的ram大小是 16 GB。
现在,我知道如果只是简单地读取文件并将其保存在HDFS中就可以了,因为Spark将为每个分区执行此操作。当我对100GB数据执行排序或聚合转换时会发生什么?它将如何处理100GB的内存,因为我们在排序时需要整个数据?
我已经通过下面的链接,但这只告诉我们在持续存在的情况下会发生什么样的火花,我看的是Spark聚合或排序大于ram大小的数据集。
Spark RDD - is partition(s) always in RAM?
感谢任何帮助。
答案 0 :(得分:4)
您可能想知道两件事。
回答你的问题,你真的不需要你的数据适合内存以便对它进行排序,正如我之前向你解释的那样。现在,我建议您考虑一种用于按数据块分割数据的数据聚合算法,就像外部排序一样。
答案 1 :(得分:0)
您需要考虑多种因素。因为你有16RAM和100GB数据集,所以最好在DISK中保持持久性。如果数据集具有高基数,那么聚合可能很困难。如果基数很低,那么在合并到整个数据集之前,最好在每个RDD上进行聚合。还要记住确保RDD中的每个分区都小于内存(默认值0.4 * container_size)