微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对 RDD 中嵌套列表中的元素进行排序Scala/Spark

如何解决对 RDD 中嵌套列表中的元素进行排序Scala/Spark

[已解决 - 往下看] 我正在尝试对如下所示的 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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。