gpt4 book ai didi

scala - 如何对RDD进行排序

转载 作者:行者123 更新时间:2023-12-04 06:28:52 26 4
gpt4 key购买 nike

我有 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() 会很重。

所以我需要按 score 对 RDD 进行排序不使用collect()。
scoreTriples 是 RDD[ARRAY[String]] RDD 的每一行将存储以下变量的数组。
EdgeId sourceID destID score源名称 目的名称距离

请给我任何引用或提示。

最佳答案

由于混洗,即使没有收集,排序也将是一项昂贵的操作,但您可以使用 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))

如果您只对排名靠前的结果感兴趣,那么 toptakeOrdered通常是首选。
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))

关于scala - 如何对RDD进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33774830/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com