首页 > 解决方案 > 如何对 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]) 

有人能帮我吗。

谢谢,

标签: scalaapache-sparkapache-spark-sqlrdd

解决方案


分析您提供的数据使我得出结论,您所缺少的只是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))

我希望答案有帮助


推荐阅读