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