Spark:如何避免大型聚合上的内存问题

时间:2015-10-28 16:24:42

标签: scala apache-spark

我从以下RDD开始,代表以下数据结构,user_id,product_id,买/不是hc.parameters

要了解每位用户购买了多少产品的统计数据,我已采用以下方法:

RDD[(String, String, Int)]

问题是我在尝试这个时遇到了Java堆问题。我的总输入大小接近500GB。在独立中,我已将我的火花设置为 def userProductAggregation(rdd: org.apache.spark.rdd.RDD[(String, String, Int)]): RDD[(String, Long)] = { val productPerUserRDD = rdd.filter(_._3 == 1) .map { case (u, p, _) => (p, u) } .distinct(numPartitions = 5000) .map { case (p, _) => (p, 1L) } .reduceByKey(_ + _, numPartitions = 5000) return productPerUserRDD } 。我认为这应该是很多工作。有没有更好的方法来编写这种方法?我认为我的方法非常有效,但我开始质疑这一点。我还尝试将分区数增加到--driver-cores 8G --executor-memory 16G --total-executor-cores 80,但问题仍然存在。

0 个答案:

没有答案