【问题标题】:How to use flatMap for flatten one component of a tuple如何使用 flatMap 展平元组的一个组件
【发布时间】:2019-04-11 14:41:21
【问题描述】:

我有一个像.. (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(" ")))

【问题讨论】:

  • val chapWords = chapters.flatMap { case(a, b) => b.split(" ").map(word => a -> word) }。问题是 flatMap 需要一个 collection 但您传递给它一个元组,因此您需要映射该集合以创建一个元组集合。
  • @LuisMiguelMejíaSuárez:感谢您的快速解决。它奏效了。

标签: scala apache-spark


【解决方案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))

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-03-05
      • 2019-03-05
      • 2022-10-24
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 2020-01-21
      • 2020-08-21
      • 2018-09-20
      相关资源
      最近更新 更多