如何结合两个不同大小的RDD

时间:2015-04-13 07:40:49

标签: scala apache-spark rdd

现在我有两个这样的RDD(数组):

1,2

3,4

第二个是这样的

5,6,7

8,9,10

现在我使用rdd1.union(rdd2),结果是这样的:

1,2

3,4

5,6,7

8,9,10

但我想要的结果是这样的:

1,2,0

3,4,0

5,6,7

8,9,10

我只想获得一个数组,其行的元素数相同,并且新元素设置为0

我想知道如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

你几乎做了你想要的!一般解决方案是:您只需将第一个Rdd映射到与第二个rdd相同的结构。我建议使用元组和类型别名来使你的代码有点清晰。让我们说:

import org.apache.spark.rdd.RDD
type X = Double
type Y = Double
type Z = Double
val rdd1: RDD[(X, Y)] = sc.parallelize(List((1,2), (3,4)))
val rdd2: RDD[(X,Y,Z)] = sc.parallelize(List((5,6,7), (8,9,10)))
val result: RDD[(X,Y,Z)] = rdd1
  .map { 
    case(x,y) => (x, y, 0.0)
  }
  .union(rdd2)

但是如果你不确定长度,那么使用数组,然后用零和联合将它们映射到其他数组。