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

How to union two different size 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

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

你几乎做到了你想做的!一般的解决方案是:您只需将第一个 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)

但是,如果您不确定长度,则使用数组,将它们映射到其他数组中,然后使用零和并集。