如何联合两个不同大小的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)
但是,如果您不确定长度,则使用数组,将它们映射到其他数组中,然后使用零和并集。
现在我有两个这样的 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)
但是,如果您不确定长度,则使用数组,将它们映射到其他数组中,然后使用零和并集。