现在我有两个这样的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
我想知道如何解决这个问题?
答案 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)
但是如果你不确定长度,那么使用数组,然后用零和联合将它们映射到其他数组。