如何在 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);
如果我有一个包含 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);