我有两个表,我想连接在一起。其中一个有非常糟糕的数据偏差。这导致我的spark作业不能并行运行,因为大部分工作都在一个分区上完成。
我听说过,读过,并试图实现盐我的键来增加分布。https://www.youtube.com/watch?v=WyfHUNnMutg在12:45秒正是我想做的。
任何帮助或提示将不胜感激。谢谢!
是的,你应该在较大的表上使用盐键(通过随机化),然后复制较小的表/笛卡尔连接到新的盐键:
这里有几个建议:
Tresata斜连接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