SPARK SCALA中是否有左外连接等效?我知道有一个连接操作,相当于数据库内连接。
答案 0 :(得分:15)
Spark Scala确实支持左外连接。看看这里 http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.api.java.JavaPairRDD
使用非常简单
rdd1.leftOuterJoin(rdd2)
答案 1 :(得分:5)
它就像rdd1.leftOuterJoin(rdd2)
一样简单,但你必须确保rdd的每一个元素都以(key,value)的形式存在。
答案 2 :(得分:3)
是的,有。看看DStream APIs,他们提供了左外连接和右外连接。
如果您有类型的流,请说“记录”,并且您希望加入两个记录流,那么您可以这样做:
var res: DStream[(Long, (Record, Option[Record]))] = left.leftOuterJoin(right)
正如API所说,左右流必须进行散列分区。也就是说,您可以从记录中获取一些属性(或者可以以任何其他方式)来计算哈希值并将其转换为配对DStream。在调用该连接函数之前,left
和right
流的类型为DStream[(Long, Record)]
。 (这只是一个例子.Hash类型也可以是Long
以外的某种类型。)
答案 3 :(得分:0)
Spark SQL / Data Frame API也直接支持LEFT / RIGHT / FULL 外部连接:
https://spark.apache.org/docs/latest/sql-programming-guide.html
由于这个错误:1.6之前的Spark中的https://issues.apache.org/jira/browse/SPARK-11111外连接可能非常慢(除非你有非常小的数据集要加入)。它曾经使用过笛卡尔积,然后在1.6之前过滤。现在它正在使用SortMergeJoin。