從以下內容可以得出具有最高值的元組嗎?在Spark中查找最大值RDD
Array[(String, Int)] = Array((a,30),(b,50),(c,20))
在這個例子中,結果我想會是(b,50)
從以下內容可以得出具有最高值的元組嗎?在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)))
除了maxBy之外,還有其他的方式嗎? – ZeroDarkThirty
使用'maxBy'有什麼問題?它看起來是最簡單,最直接的方式。 – Dani
當我使用maxBy時,出現以下錯誤: 'error:value maxBy不是org.apache.spark.rdd.RDD的成員[(String,int)]' – ZeroDarkThirty
如果你是新的火花,我要告訴你,你必須使用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()
這應該起作用,它至少適用於我。希望對您有所幫助
如果要轉換爲數據框,最好使用聚合函數max()。 – mtoto
問題在於它只返回一列的值,我們希望整行 –
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)
我們可以使用maxBy來收集這樣的數據
您正在詢問如何在使用Array [(String,Int)]'示例時在RDD中查找最大值。我錯過了Spark的RDD API和Scala之間的連接。輸入數組有多大? –