分割rdd和元素子组

时间:2019-05-14 12:48:34

标签: scala apache-spark rdd

我想分割有关逗号的RDD并访问一组预定义的元素。 例如,我有一个这样的RDD:

a, b, c, d
e, f, g, h

我需要拆分然后访问第一行的第一和第四元素以及第二行的第二和第三元素,以得到最终的RDD:

a, d
f, g

我不能在代码上硬写“ 1”和“ 4”,这就是为什么这样的解决方案不起作用的原因:

rdd.map{line => val words = line.split(",") (words(0),words(3)) }

让我们假设我有第二个RRD,其行数相同,其中包含我要为每行获取的元素

1,4
2,3

有没有办法获取我的元素?

1 个答案:

答案 0 :(得分:0)

  

让我们假设我有第二个RRD,其行数相同,其中包含我要为每行获取的元素

1,4
2,3
  

有没有办法获取我的元素?

如果第二个RDD已经具有每行所需组的编号,则可以压缩它们。 来自Spark文档:

<U> RDD<scala.Tuple2<T,U>> zip(RDD<U> other, scala.reflect.ClassTag<U> evidence$13)
  

将此RDD与另一个RIP压缩在一起,返回键值对以及每个RDD中的第一个元素,每个RDD中的第二个元素,等等。

因此,在您的示例中,a, b, c, d1,4在键值对中,而e, f, g, h2,3在键值对中。因此,您可以执行以下操作:

val groupNumbers = lettersRDD zip numbersRDD

groupnumbers.map{tuple -> 
val numbers: Seq[Int] = // get the numbers from tuple._2
 val words = tuple._1.split(",") (words(numbers.head),words(numbers(1) ) }
}