scala - 如何对 Spark 中 groupByKey 产生的键进行排序
问题描述
需要帮助在 groupByKey 输出后对键进行排序:
val skuRDD2:RDD[(String,Iterable[(String,imageinfo2))]= DF.select("ID", "TAG","MEDIA_ID","IMAGE_NAME","PATH").rdd
.map(r => (r .getString(0),( r.getString(1),ImageInfo2(r.getString(2),r.getString(3),r.getString(4)))) )
.groupByKey()
我想按标签排序,即。在上面的 groupByKey 输出中键入 Iterable[(String,imageinfo2))。
输入(高于 groupByKey 输出)-
(skuid,Map(largeImage_4 -> [Media/Device Images/Large Images/Huawei Images Large/GR5GRY-4,m110005,GR5GRY-4], largeImage_1 -> [Media/Device Images/Large Images/Huawei Images Large/GR5GRY-1,m110002,GR5GRY-1])
预期产出 -
(skuid,Map(largeImage_1 -> [Media/Device Images/Large Images/Huawei Images Large/GR5GRY-1,m110002,GR5GRY-1], largeImage_4 -> [Media/Device Images/Large Images/Huawei Images Large/GR5GRY-4,m110005,GR5GRY-4])
有人能帮我吗。
谢谢,
解决方案
分析您提供的数据使我得出结论,您所缺少的只是mapValues
进行排序的简单功能。
.mapValues(x => x.toList.sortBy(y => y._1))
所以你的代码应该是
val skuRDD2:RDD[(String,Iterable[(String,ImageInfo2)])] = DF.select("ID", "TAG","MEDIA_ID","IMAGE_NAME","PATH").rdd
.map(r => (r .getString(0),( r.getString(1),ImageInfo2(r.getString(2),r.getString(3),r.getString(4)))) )
.groupByKey().mapValues(x => x.toList.sortBy(y => y._1))
我希望答案有帮助
推荐阅读
- java - Jackson ObjectMapper 删除未在抽象或具体类中声明的属性
- python - 删除索引后用空字符串更新python gspread列表
- python - 使用 Python 转换 DataFrame
- aws-amplify - AWS Amplify 发布到自定义域
- google-apps-script - Google Sheets 脚本可在多页文档中打开最后修改的表单
- php - 如何更改 laravel 框架上的搜索地址?
- python - 如何使用 Python 测试是否在函数内部调用了实例方法?
- css - 为单选按钮添加无效的类 CSS
- c# - 已发布的 .NET 框架 3.5 程序在安装期间需要 .NET 框架 4.7.2
- javascript - jQuery for 循环仅获取第一项值