如何使用flatMap展平元组的一个组成部分

时间:2019-04-10 01:53:05

标签: scala apache-spark

我有一个类似.. (a, list(b,c,d))的元组。我想要类似的输出

(a,b)
(a,c)
(a,d)

我正在尝试为此使用flatMap,但未获得任何成功。在这种情况下,甚至地图也无济于事。

输入数据:

Chap01:Spark is an emerging technology
Chap01:You can easily learn Spark
Chap02:Hadoop is a Bigdata technology
Chap02:You can easily learn Spark and Hadoop

代码:

val rawData = sc.textFile("C:\\wc_input.txt")

val chapters = rawData.map(line => (line.split(":")(0), line.split(":")(1)))

val chapWords = chapters.flatMap(a => (a._1, a._2.split(" ")))

2 个答案:

答案 0 :(得分:1)

您可以映射到元组的第二个元素:

val t = ('a', List('b','c','d'))
val res = t._2.map((t._1, _))

上面摘录的内容解析为:

res: List[(Char, Char)] = List((a,b), (a,c), (a,d))

答案 1 :(得分:0)

这种情况可以通过RDD中的 flatMapValues 方法轻松处理。它仅对保持键相同的RDD对值起作用。