[英]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.