Apache Spark 处理倾斜数据

Apache Spark Handling Skewed Data

我有两个表想连接在一起。其中一个有非常严重的数据偏差。这导致我的 spark 作业无法 运行 并行,因为大部分工作是在一个分区上完成的。

我听过、读过并尝试对我的密钥进行加盐以增加分发。 https://www.youtube.com/watch?v=WyfHUNnMutg 在 12:45 秒正是我想要做的。

如有任何帮助或提示,我们将不胜感激。谢谢!

是的,您应该在较大的 table 上使用加盐键(通过随机化),然后复制较小的键/笛卡尔将其加入新的加盐键:

这里有一些建议:

Tresata skew join RDD https://github.com/tresata/spark-skewjoin

python skew join: https://datarus.wordpress.com/2015/05/04/fighting-the-skew-in-spark/

tresata 库如下所示:

import com.tresata.spark.skewjoin.Dsl._  // for the implicits   

// skewjoin() method pulled in by the implicits
rdd1.skewJoin(rdd2, defaultPartitioner(rdd1, rdd2),   
DefaultSkewReplication(1)).sortByKey(true).collect.toLis