gpt4 book ai didi

scala - Apache Spark 中的 join 和 cogroup 有什么区别

转载 作者:行者123 更新时间:2023-12-03 07:57:45 29 4
gpt4 key购买 nike

Apache Spark 中的 join 和 cogroup 有什么区别?每种方法的用例是什么?

最佳答案

让我来帮助您澄清它们,两者都很常用且很重要!

def join[W](other: RDD[(K, W)]): RDD[(K, (V, W))]
这是 prototype加盟, 请仔细看 .例如,
val rdd1 = sc.makeRDD(Array(("A","1"),("B","2"),("C","3")),2)
val rdd2 = sc.makeRDD(Array(("A","a"),("C","c"),("D","d")),2)

scala> rdd1.join(rdd2).collect
res0: Array[(String, (String, String))] = Array((A,(1,a)), (C,(3,c)))
将出现在最终结果中的所有键 常见于 rdd1 和 rdd2。这类似于 relation database operation INNER JOIN .
但是cogroup就不一样了 ,
def cogroup[W](other: RDD[(K, W)]): RDD[(K, (Iterable[V], Iterable[W]))]
由于一个key至少出现在两个rdd中的任何一个中,它会出现在最终结果中,让我澄清一下:
val rdd1 = sc.makeRDD(Array(("A","1"),("B","2"),("C","3")),2)
val rdd2 = sc.makeRDD(Array(("A","a"),("C","c"),("D","d")),2)

scala> var rdd3 = rdd1.cogroup(rdd2).collect
res0: Array[(String, (Iterable[String], Iterable[String]))] = Array(
(B,(CompactBuffer(2),CompactBuffer())),
(D,(CompactBuffer(),CompactBuffer(d))),
(A,(CompactBuffer(1),CompactBuffer(a))),
(C,(CompactBuffer(3),CompactBuffer(c)))
)
这很 similarrelation database operation FULL OUTER JOIN ,但是 它不会将每条记录每行的结果展平,而是为您提供 iterable interface给你 ,以下操作为 随你方便 !
祝你好运!
Spark 文档是: http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.rdd.PairRDDFunctions

关于scala - Apache Spark 中的 join 和 cogroup 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43960583/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com