我最近正在忙碌工作,遇到了一些我仍然无法解决的问题。



现在,我知道在简单读取文件并将其保存在HDFS中的情况下,Spark会对每个分区执行此操作。对100GB数据执行排序或聚合转换时会发生什么?由于排序时需要全部数据,它将如何处理100GB的内存?

我已经看过下面的链接,但这仅告诉我们在持久存在的情况下spark会做什么,我正在寻找的是Spark聚合或对大于ram大小的数据集进行排序。

Spark RDD - is partition(s) always in RAM?

任何帮助表示赞赏。

最佳答案

您可能想知道两件事。

  • 一旦Spark达到内存限制,它将开始将数据溢出到
    磁盘。请检查此Spark faq,也有几个
    来自SO的谈论相同问题的问题,例如this one
  • 有一个名为external sort的算法,可用于排序不适合内存的数据集。本质上,您将大型数据集按实际适合内存的块划分,对每个块进行排序并将每个块写入磁盘。最后,合并每个排序的块以便对整个数据集进行排序。 Spark支持外部排序,如您所见,herehere是实现。

  • 回答您的问题,就像我之前向您解释的那样,您实际上不需要将数据放入内存中即可对其进行排序。现在,我鼓励您考虑一种像外部排序一样的将数据按块划分的数据聚合算法。

    07-25 23:19
    查看更多