通过展平元组的值来转换RDD

时间:2017-03-22 16:12:27

标签: scala apache-spark rdd

我正在尽力去理解Apache Spark中的map-reduce功能,而且我仍然坚持扁平化(不确定这是否是正确的术语)RDD。

我在scala中有以下RDD结构:

RDD[Tuple2[Long, Tuple2[String, Array[String]]]]

这方面的一个例子是:

(1, ("a", ["alice", "bob"]))
(2, ("b", ["charlie", "dave"]))
(3, ("a", ["edward"]))

我想将此RDD转换为以下类型:

RDD[Tuple2[Long, Tuple2[String, String]]]

看起来像:

(1, ("a", "alice"))
(1, ("a", "bob"))
(2, ("b", "charlie"))
(2, ("b", "dave"))
(3, ("a", "edward"))

不幸的是,我无法通过map / flatMap函数了解这种操作。 这种转变是否可能,如果是这样,怎么样?

提前致谢!

1 个答案:

答案 0 :(得分:3)

完全有可能:

rdd.flatMap { case (k, (x, ys)) => ys.map(y => (k, (x, y))) }