如何在 Spark Scala 中对包含 5 个元素的元组 RDD 进行排序?

How to sort an RDD of tuples with 5 elements in Spark Scala?

如果我有一个包含 5 个元素的元组的 RDD,例如, RDD(双精度、字符串、整数、双精度、双精度)

如何使用第五个元素有效地对这个 RDD 进行排序?

我试图将这个 RDD 映射到键值对并使用 sortByKey,但看起来 sortByKey 很慢,它比我收集这个 RDD 并在收集的数组上使用 sortWith 慢。为什么会这样?

非常感谢。

您可以通过 sortBy 直接作用于 RDD 来做到这一点:

myRdd.sortBy(_._5) // Sort by 5th field of each 5-tuple

有额外的可选参数来定义排序顺序 ("ascending") 和分区数。

sortByKey 是 Spark 1.0 唯一的分布式排序 API

您要排序多少数据?少量将导致更快的 local/centralized 排序。如果您尝试对甚至可能无法放在单个节点上的 GB 和 GB 数据进行排序,这就是 Spark 的优势所在。

如果要降序排列&如果对应的元素是int类型,可以用“-”号对RDD进行降序排列

例如:

我有一个包含 (String, Int) 元组的 RDD。要按降序排列此 RDD 的第二个元素,

rdd.sortBy(x => -x._2).collect().foreach(println);

我有一个包含 (String, String) 的元组 RDD。要按降序排列此 RDD 的第二个元素,

rdd.sortBy(x => x._2, false).collect().foreach(println);