scala如何取出rdd中的每一个元素
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scala如何取出rdd中的每一个元素相关的知识,希望对你有一定的参考价值。
参考技术A rdd.collect可以把所有元素取回本地成为一个数组,但是比较占内存在 RDD (Scala/Spark) 中对嵌套列表中的元素进行排序
【中文标题】在 RDD (Scala/Spark) 中对嵌套列表中的元素进行排序【英文标题】:Sorting elements inside nested list in an RDD (Scala/Spark) 【发布时间】:2021-07-13 02:36:04 【问题描述】:我正在尝试对 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], [carrot]), List([lemon], [orange])))
并希望输出是这样的(嵌套列表的内容按字母降序排序):
(342, List(List([apple], [banana]), List([lemon], [orange])))
(342, List(List([carrot], [coconut]), List([kiwi], [watermelon])))
(794, List(List([orange], [strawberry]), List([carrot], [lemon])))
【问题讨论】:
你试过什么? 最初的想法是“爆炸”/反转类似于 groupByKey 的结构,所以我的 rdd 中有 6 个元素并且没有嵌套列表(而不是 3 个嵌套)看起来有点像这样(342 ,列表([香蕉],[苹果]))。然后我可以对元组中的每个列表进行排序。发现另一个帖子尝试了类似的方法,但无法使其正常工作 (***.com/questions/56742432/…) 解决了@sinanspd,并添加了问题的解决方案。无论如何,谢谢。 你能发布答案吗 @Rajasekhar 现在发布了一个答案。抱歉没有看到您的评论。 【参考方案1】:设法通过以下方式解决它(反向组结构和排序非嵌套列表(请注意,RDD 结构已更改 - 在这种情况下无关紧要)。
data.flatMap(x => x._2.map(i => (x._1, i))).mapValues(x => x.sorted)
【讨论】:
以上是关于scala如何取出rdd中的每一个元素的主要内容,如果未能解决你的问题,请参考以下文章
如何将 RDD [GenericRecord] 转换为 scala 中的数据框?
Spark Scala 根据另一个 RDD 的列删除一个 RDD 中的行
如何将 Spark/Scala RDD 合并/加入到 List 中,以便 RDD 中的每个值与每个 List 项一起获得一个新行