我有一个Spark程序,它合并了两个文件。当文件很小时,一切正常。当一个文件是巨大的时候我遇到了问题。它遇到资源问题或需要很长时间。
HUGE文件包含过去15年的数据,但新数据(小文件)仅包含最近几年。理想情况下,如果我可以按年分配我的数据然后合并最近几年的新数据,这将加速很多事情!
我如何在Spark中执行此操作?作为旁注,在MapReduce世界中,我曾经使用MultipleOutputs类来完成此任务。
答案 0 :(得分:0)
您需要来自PairRDDFunctions(https://spark.apache.org/docs/0.6.2/api/core/spark/PairRDDFunctions.html)的partitionBy()。在使用HashPartitioner参数调用partitionBy之前,将年份作为键。现在,当您在第一个数据集上调用join时,spark将记住它是散列分区的,因此只有第二个数据集将通过网络混洗到相应的分区,从而节省了大量时间。这类似于MultipleOutputs,通过基于密钥重新分区数据。