在Scala中完全外部联接后计算RDD内部的变量

时间:2016-09-26 15:52:05

标签: scala join apache-spark rdd

我想做的是简单,但我在使用Scala和RDD。 这个概念是这样的:

   rdd1                           rdd2

id   count                      id   count            
 a     2                         a     1
 b     1                         c     5
                                 d     3

我要搜索的结果是:

  rdd2

id   count                               
 a     3                         
 b     1
 c     5
 d     3                        

我打算做的是执行完全外连接以获取由id字段标识的公共寄存器和非公共寄存器。目前,rdd2是空的。 rdd1和rdd2是:

RDD[(String, org.apache.spark.sql.Row)]

目前,我有以下代码:

 var rdd3 = rdd1.fullOuterJoin(rdd2).map {
     case (id, left, right) =>
     // TODO  
 }

如何计算RDD之间的总和?

1 个答案:

答案 0 :(得分:1)

如果您正在执行val result = rdd1.fullOuterJoin(rdd2).map { case (id, (left, right)) => (id, left.getOrElse(0) + right.getOrElse(0)) } ,则会获得密钥并将两个选项传递到闭包中(一个选项表示左侧,另一个选项表示右侧)。因此闭包可能如下所示:

RDD

如果您的(String, Int)类型为if not line.strip(): break ,则适用。