问题描述
[已解决 - 往下看] 我正在尝试对如下所示的 RDD 对象的每个嵌套列表中的元素进行排序:
org.apache.spark.rdd.RDD[(Long,List[List[String]])]
未排序的示例:
(342,List(List([banana],[apple]),List([orange],[lemon])))
(342,List(List([coconut],[carrot]),List([watermelon],[kiwi])))
(794,List(List([strawBerry],List([lemon],[orange])))
(342,List(List([apple],[banana]),[orange])))
(342,List(List([carrot],[coconut]),List([kiwi],[watermelon])))
(794,List(List([orange],[strawBerry]),List([carrot],[lemon])))
最初的想法是“分解”/反转类似于 groupByKey 的结构,所以我的 rdd 中有 6 个元素,并且没有嵌套列表(而不是 3 个嵌套),看起来有点像这样(342,List([banana ], [苹果]))。然后我可以对元组中的每个列表进行排序。发现另一篇尝试过类似方法的帖子,但无法使其工作(stackoverflow.com/questions/56742432/...)
解决办法: 设法解决它执行以下操作(反向组结构和排序非嵌套列表(请注意,RDD 结构已更改 - 在这种情况下无关紧要)。
data.flatMap(x => x._2.map(i => (x._1,i))).mapValues(x => x.sorted)
解决方法
通过执行以下操作设法解决了它(反向组结构并对非嵌套列表进行排序(请注意,RDD 结构已更改 - 在这种情况下无关紧要)。
data.flatMap(x => x._2.map(i => (x._1,i))).mapValues(x => x.sorted)