Rem*_*bel 5 scala key list apache-spark
我有以下列方式格式化的数据:
DataRDD = [(String, List[String])]
Run Code Online (Sandbox Code Playgroud)
第一个字符串表示键,列表包含值.请注意,每个键的值数量不同(但绝不为零).我希望以这样一种方式映射RDD,即列表中的每个元素都有一个键值对.为了澄清这一点,想象整个RDD如下:
DataRDD = [(1, [a, b, c]),
(2, [d, e]),
(3, [a, e, f])]
Run Code Online (Sandbox Code Playgroud)
然后我希望结果如下:
DataKV = [(1, a),
(1, b),
(1, c),
(2, d),
(2, e),
(3, a),
(3, e),
(3, f)]
Run Code Online (Sandbox Code Playgroud)
因此,我想返回具有相同值的所有键组合.即使没有相同的值,也可以将其返回到每个键的列表中:
DataID = [(1, [3]),
(2, [3]),
(3, [1, 2])]
Run Code Online (Sandbox Code Playgroud)
由于我是Spark和Scala的新手,我还没有完全掌握他们的概念,因此我希望你们中的任何人都可以帮助我.即使它只是其中的一部分.
Osc*_*car 14
这绝对是一个经常出现的新手问题.解决方案是使用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
Run Code Online (Sandbox Code Playgroud)
这将提供所需的解决方案
Array((1,a), (1,b), (1,c), (2,d), (2,e), (3,a), (3,e), (3,f))
Run Code Online (Sandbox Code Playgroud)