簡體   English   中英

在 Spark RDD 中尋找最大值

[英]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)))

如果元素總是兩個元素的元組,你可以簡單地:

Array((a,30),(b,50),(c,20)).maxBy(_._2)

文檔中所述。

如果您是 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM