繁体   English   中英

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

[英]What's the difference between join and cogroup in Apache Spark

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

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

def join[W](other: RDD[(K, W)]): RDD[(K, (V, W))]

这是join的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)))
)

similar relation database operation FULL OUTER JOIN非常similar ,但不是将每条记录的每行结果展平,而是为您提供iterable interface ,以下操作由您决定,方便

祝你好运!

Spark 文档是: http : //spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.rdd.PairRDDFunctions

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM