【问题标题】:How to convert RDD like ((int, int), int) into 3 key-value pairs in one map function in spark?如何在火花的一个映射函数中将RDD((int,int),int)转换为3个键值对?
【发布时间】:2017-02-21 03:23:31
【问题描述】:

现在我有一个如下格式的 RDD

( (int, int), int )

我正在尝试将其转换为 3 个键值对,例如 (int, 1)。

我可以通过使用 3 个地图函数然后将它们连接在一起来做到这一点,但这绝对不是实现它的最佳方式,

也可以通过使用 case 生成 ((int, 1), (int, 1), (int, 1)) 的列表,但是如何生成 (int, 1) 的列表?

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    也许你想要flatMap

    rdd.flatMap { case ((x, y), z) => List((x, 1), (y, 1), (z, 1)) }
    

    上面的代码生成RDD[(Int, Int)],将RDD中的每个嵌套元组扩展成三个独立的RDD元素。

    【讨论】:

      【解决方案2】:

      它不应该需要三个地图函数,而是一个地图函数,如下所示

      inputRDD.map({case ((x,y),z) => ((x,1),(y,1),(z,1))})
      

      【讨论】:

      • 对,我一开始就是这么想的,但是我需要生成的是list((int, 1)),而不是list(((int,1), (int,1) ,(int,1)))
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-28
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      相关资源
      最近更新 更多