2015-02-24 47 views
8

相关Spark - Joining 2 PairRDD elements在火花加入中,表格顺序像猪一样吗?

在做猪常规连接,在连接的最后一个表中没有带入内存,但通过改为流,因此,如果有每个键和B大基数小的基数,是显著更好做join A, Bjoin A by B,从性能的角度来看(避免溢出和OOM)

是否有火花类似的概念?我没有看到任何这样的建议,不知道怎么可能?实施在我看来与猪几乎相同:https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/CoGroupedRDD.scala

或者我错过了什么?

回答

3

这并没有什么区别,火花RDD只会被带入内存,如果它被缓存。因此,在spark中达到相同的效果,您可以缓存较小的RDD。另一件你可以在火花上做的事情,我不确定那只猪是否会做,如果所有RDD的加入都有相同的分区器,则不需要进行任何洗牌。

+0

好的,但假设我们没有缓存任何RDD。我假设spark在2个RDD之间做了一种嵌套循环。如果A每个连接键有1M个记录,而B每个连接键只有3个记录,但两者都很大。如果外(左)表是A,则每个连接键都会导致溢出到磁盘......对吗? – ihadanny 2015-03-07 20:07:27

+0

@ihadanny如果你看看[源代码](https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/PairRDDFunctions.scala#L503)所有东西都是一个迭代器,所以没有必要加载到内存中,当迭代器耗尽时,它只会从一开始就开始,据说它看起来像for循环会将输出留在内存中 – aaronman 2015-03-07 22:53:07