如何对RDD进行排序
How to sort RDD
我有 scoreTriplets 是 RDD[ARRAY[String]] 我正在按以下方式排序。
var ScoreTripletsArray = scoreTriplets.collect()
if (ScoreTripletsArray.size > 0) {
/*Sort the ScoreTripletsArray descending by score field*/
scala.util.Sorting.stableSort(ScoreTripletsArray, (e1: Array[String], e2: Array[String]) => e1(3).toInt > e2(3).toInt)
}
但是如果缺少元素,collect()会很重。
所以我需要在不使用 collect() 的情况下按 score
对 RDD 进行排序。
scoreTriples 是 RDD[ARRAY[String]] RDD 的每一行将存储以下变量的数组。
EdgeId sourceID destID score
sourceNAme destNAme 距离
请给我任何参考或提示。
由于混洗,即使不收集,排序也将是一项昂贵的操作,但您可以使用 sortBy
方法:
import scala.util.Random
val data = Seq.fill(10)(Array.fill(3)("") :+ Random.nextInt.toString)
val rdd = sc.parallelize(data)
val sorted = rdd.sortBy(_.apply(3).toInt)
sorted.take(3)
// Array[Array[String]] = Array(
// Array("", "", "", -1660860558),
// Array("", "", "", -1643214719),
// Array("", "", "", -1206834289))
如果您只对最高结果感兴趣,那么 top
和 takeOrdered
通常是首选。
import scala.math.Ordering
rdd.takeOrdered(2)(Ordering.by[Array[String], Int](_.apply(3).toInt))
// Array[Array[String]] =
// Array(Array("", "", "", -1660860558), Array("", "", "", -1643214719))
rdd.top(2)(Ordering.by[Array[String], Int](_.apply(3).toInt))
// Array[Array[String]] =
// Array(Array("", "", "", 1920955686), Array("", "", "", 1597012602))
RDD中有sortBy方法(参见doc)。
你可以做类似的事情
scoreTriplets.sortBy( _(3).toInt )
我有 scoreTriplets 是 RDD[ARRAY[String]] 我正在按以下方式排序。
var ScoreTripletsArray = scoreTriplets.collect()
if (ScoreTripletsArray.size > 0) {
/*Sort the ScoreTripletsArray descending by score field*/
scala.util.Sorting.stableSort(ScoreTripletsArray, (e1: Array[String], e2: Array[String]) => e1(3).toInt > e2(3).toInt)
}
但是如果缺少元素,collect()会很重。
所以我需要在不使用 collect() 的情况下按 score
对 RDD 进行排序。
scoreTriples 是 RDD[ARRAY[String]] RDD 的每一行将存储以下变量的数组。
EdgeId sourceID destID score
sourceNAme destNAme 距离
请给我任何参考或提示。
由于混洗,即使不收集,排序也将是一项昂贵的操作,但您可以使用 sortBy
方法:
import scala.util.Random
val data = Seq.fill(10)(Array.fill(3)("") :+ Random.nextInt.toString)
val rdd = sc.parallelize(data)
val sorted = rdd.sortBy(_.apply(3).toInt)
sorted.take(3)
// Array[Array[String]] = Array(
// Array("", "", "", -1660860558),
// Array("", "", "", -1643214719),
// Array("", "", "", -1206834289))
如果您只对最高结果感兴趣,那么 top
和 takeOrdered
通常是首选。
import scala.math.Ordering
rdd.takeOrdered(2)(Ordering.by[Array[String], Int](_.apply(3).toInt))
// Array[Array[String]] =
// Array(Array("", "", "", -1660860558), Array("", "", "", -1643214719))
rdd.top(2)(Ordering.by[Array[String], Int](_.apply(3).toInt))
// Array[Array[String]] =
// Array(Array("", "", "", 1920955686), Array("", "", "", 1597012602))
RDD中有sortBy方法(参见doc)。 你可以做类似的事情
scoreTriplets.sortBy( _(3).toInt )