首页 > 解决方案 > 拆分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

有没有办法得到我的元素?

标签: scalaapache-sparkrdd

解决方案


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

1,4
2,3

有没有办法得到我的元素?

如果您有第二个 RDD,其中已经有每行所需的组数,您可以压缩它们。来自 Spark 文档:

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

用另一个 RDD 压缩这个 RDD,返回每个 RDD 中的第一个元素、每个 RDD 中的第二个元素等的键值对。

因此,在您的示例中,将位于带有和a, b, c, d的键值对中。因此,您可以执行以下操作:1,4e, 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) ) }
}

推荐阅读