【发布时间】:2017-04-19 17:30:36
【问题描述】:
您好,我尝试在 spark 中使用 scala 将元素插入 rdd 数组[String]。
这里是例子。
val data = RDD[Array[String]] = Array(Array(1,2,3), Array(1,2,3,4), Array(1,2)).
我想将此数据中所有数组的长度设为 4。
如果数组的长度小于4,我想在数组中填充NULL值。
这是我试图解决的代码。
val newData = data.map(x =>
if(x.length < 4){
for(i <- x.length until 4){
x.union("NULL")
}
}
else{
x
}
)
但是结果是Array[Any] = Array((), Array(1, 2, 3, 4), ())。
所以我尝试了另一种方法。我在 for 循环中使用了 yield。
val newData = data.map(x =>
if(x.length < 4){
for(i <- x.length until 4)yield{
x.union("NULL")
}
}
else{
x
}
)
结果是Array[Object] = Array(Vector(Array(1, 2, 3, N, U, L, L)), Array(1, 2, 3, 4), Vector(Array(1, 2, N, U, L, L), Array(1, 2, N, U, L, L)))
这些不是我想要的。我想这样回来
RDD[Array[String]] = Array(Array(1,2,3,NULL), Array(1,2,3,4), Array(1,2,NULL,NULL)).
我该怎么办? 有办法解决吗?
【问题讨论】:
标签: arrays scala apache-spark rdd