如何减少Spark任务数量&避免分组

时间:2016-02-27 05:12:11

标签: apache-spark pyspark

所有,我正在使用PySpark&需要加入两个RDD,但要加入它们我需要通过连接键对每个RDD的所有元素进行分组,然后执行连接功能。这会导致额外的开销,我不确定可以解决什么问题。这也是创建大量任务,这反过来又增加了写入HDFS的文件数量,并且大大减慢了整个过程,这是一个例子:

RDD1 = [join_col,{All_Elements of RDD1}] #derived by using groupby join_col)
RDD2 = [join_col,{All_Elements of RDD2}] #derived by using groupby join_col)

RDD3 = RDD1.join(RDD2)

1 个答案:

答案 0 :(得分:0)

如果需要的输出被分组并且两个RDD都要大到广播,那么在代码级别上你无能为力。简单地应用cogroup

可能更干净
rdd1.cogroup(rdd2)

但性能方面应该没有显着差异。如果您怀疑可能存在大量数据/散列偏差,则可以尝试不同的分区,例如使用sortByKey,但在一般情况下它不太可能帮助您。