当前位置: 首页 > 知识库问答 >
问题:

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

蒋乐意
2023-03-14

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

共有1个答案

苏鸿波
2023-03-14

让我来帮你澄清一下,这两个都是常用的和重要的!

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所共有的。这类似于关系数据库操作INNER join

def cogroup[W](other: RDD[(K, W)]): RDD[(K, (Iterable[V], Iterable[W]))]
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)))
)

这是非常类似关系数据库操作完全外部连接,但不是每一行每条记录的结果扁平化,它将给你可迭代接口给你,下面的操作就由你来方便了!

祝你好运!

Spark docs是:http://Spark.apache.org/docs/latest/api/scala/index.html#org.apache.Spark.rdd.pairrddfunctions

 类似资料:
  • 问题内容: Doctrine2中的JOIN ON和JOIN WITH有什么区别? 我在手册中找不到任何相关信息。 问题答案: 替换原始的加入条件, 并为其添加条件。 范例 : 案例一 DQL 将翻译成SQL 案例二 DQL 将翻译成SQL

  • 问题内容: 之间有什么区别? 和: 我可以互换使用吗? 问题答案: MySQL在和之间没有区别。他们是一样的。 在两个示例中,子句 将任何类型的联接转换为内部联接。表达此查询的标准方式是

  • 问题内容: 和之间有什么区别?我可以举个例子吗? 问题答案: 逐个查询放置一行,同时生成笛卡尔乘积并对其进行子集化-完全不同的操作。琐碎的例子: 的类似的琐碎示例:

  • 问题内容: 这个问题已经在这里有了答案 : “泪神经联接”和“尿素联接”有什么区别? (27个答案) 7年前关闭。 内部联接和外部联接之间的区别。我正在使用两个表,并希望从两个表中获取数据,因此我们应该使用拥有哪种类型的连接来解决我们的问题 问题答案: 内部联接-使用任一等价查询的内部联接给出两个表的交集,即它们共有的两行。 左外部联接-左外部联接将给出A中的所有行,以及B中的所有常见行。 完全外

  • 问题内容: 请帮助我了解在哪里使用常规JOIN和JOIN FETCH。 例如,如果我们有这两个查询 和 它们之间有什么区别吗?如果是,何时使用哪个? 问题答案: 在这两个查询中,你正在使用JOIN查询与至少一个部门关联的所有员工。 但是,不同之处在于:在第一个查询中,你仅返回hibernate的Employes。在第二个查询中,你将返回员工和所有关联的部门。 因此,如果你使用第二个查询,则无需执行

  • 请帮助我理解在哪里使用常规连接以及连接在哪里提取。 例如,如果我们有这两个查询 而且 它们之间有什么区别吗?如果是,何时使用哪一种?