使用apache spark
使用Java
。我得到了JavaPairRDD<String,Long>
,我希望按其值对此数据集进行排序。但是,似乎只有sortByKey
方法。我怎样才能按Long
类型的值对其进行排序?
答案 0 :(得分:5)
dataset.mapToPair(x - &gt; x.swap())。sortByKey(false).mapToPair(x - &gt; x.swap())。take(100)
答案 1 :(得分:4)
Spark尚不支持“二级排序”(有关详细信息,请参阅SPARK-3655)。
作为解决方法,您可以通过交换键&lt; - &gt;按值进行排序。值和按常规按键排序。
在Scala中会是这样的:
val kv:RDD[String, Long] = ???
// swap key and value
val vk = kv.map(_.swap)
val vkSorted = vk.sortByKey
答案 2 :(得分:0)
我使用列表进行了此操作,该列表现在具有sort(Comparator c)
方法
List<Tuple2<String,Long>> touples = new ArrayList<>();
touples.addAll(myRdd.collect()); //
touples.sort((Tuple2<String, Long> o1, Tuple2<String, Long> o2) -> o2._2.compareTo(o1._2));
它比@Atul解决方案更长,并且我不知道性能方面是否更好,在具有500个项目的RDD上没有区别,我想知道它如何与100万条记录的RDD一起工作。
您还可以使用Collections.sort
并传递collect
和基于lambda的Comparator
所提供的列表