[英]Finding the max value in Spark RDD
從以下內容中,如何獲得具有最高值的元組?
Array[(String, Int)] = Array((a,30),(b,50),(c,20))
在這個例子中,我想要的結果是(b,50)
您可以使用reduce()
:
val max_tuple = rdd.reduce((acc,value) => {
if(acc._2 < value._2) value else acc})
//max_tuple: (String, Int) = (b,50)
數據
val rdd = sc.parallelize(Array(("a",30),("b",50),("c",20)))
如果您是 spark 新手,我應該告訴您,您必須盡可能多地使用Dataframe
s,它們與RDD
s 相比有很多優勢,使用Dataframe
s 您可以獲得最大值,如下所示:
import spark.implicits._
import org.apache.spark.sql.functions.max
val df = Seq(("a",30),("b",50),("c",20)).toDF("x", "y")
val x = df.sort($"y".desc).first()
免責聲明:正如@Mandy007 在評論中指出的,這個解決方案的計算成本更高,因為它必須被訂購
這應該有效,至少對我有效。 希望這對你有幫助。
reduce()
為我返回錯誤的結果。 還有一些其他選擇:
val maxTemp2 = rdd.max()(Ordering[Int].on(x=>x._2))
val maxTemp3 = rdd.sortBy[Int](x=>x._2).take(1)(0)
數據
val rdd = sc.parallelize(Array(("a",30),("b",50),("c",20)))
rdd.reduceByKey((a,b)=>a+b).collect.maxBy(_._2)
我們可以像這樣在 collect 上使用 maxBy
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.