Spark - 使用JavaPairRDD按值排序

时间:2014-11-26 15:48:31

标签: sorting apache-spark

使用apache spark使用Java。我得到了JavaPairRDD<String,Long>,我希望按其值对此数据集进行排序。但是,似乎只有sortByKey方法。我怎样才能按Long类型的值对其进行排序?

3 个答案:

答案 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所提供的列表