相当于SPARK中的左外连接

时间:2014-04-21 08:21:33

标签: scala apache-spark

SPARK SCALA中是否有左外连接等效?我知道有一个连接操作,相当于数据库内连接。

4 个答案:

答案 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。在调用该连接函数之前,leftright流的类型为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。