【问题标题】:Ungrouping a (key, list(values)) pair in Spark/Scala在 Spark/Scala 中取消组合 (key, list(values)) 对
【发布时间】:2015-01-15 06:59:52
【问题描述】:

我的数据格式如下:

DataRDD = [(String, List[String])]

第一个字符串表示键,列表包含值。请注意,每个键的值的数量是不同的(但绝不是零)。我希望以这样一种方式映射 RDD,以便列表中的每个元素都有一个键值对。为了澄清这一点,将整个 RDD 想象为以下列表:

DataRDD = [(1, [a, b, c]), 
           (2, [d, e]),
           (3, [a, e, f])]

那么我希望结果是:

DataKV  = [(1, a),
           (1, b),
           (1, c),
           (2, d),
           (2, e),
           (3, a),
           (3, e),
           (3, f)]

因此,我想返回所有具有相同值的键组合。这可能会返回到每个键的列表中,即使没有相同的值:

DataID  = [(1, [3]),
           (2, [3]),
           (3, [1, 2])]

由于我对 Spark 和 Scala 还很陌生,我还没有完全掌握它们的概念,因此我希望你们中的任何人都可以帮助我。哪怕只是其中的一部分。

【问题讨论】:

    标签: list scala key apache-spark


    【解决方案1】:

    这绝对是一个经常出现的新手问题。解决方案是使用 flatMapValues

    val DataRDD = sc.parallelize(Array((1, Array("a", "b", "c")), (2, Array("d", "e")),(3, Array("a", "e", "f"))))
    
    DataRDD.flatMapValues(x => x).collect
    

    这将提供所需的解决方案

    Array((1,a), (1,b), (1,c), (2,d), (2,e), (3,a), (3,e), (3,f))
    

    【讨论】:

      猜你喜欢
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      • 2013-02-13
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      相关资源
      最近更新 更多