在Spark RDD中查找最大值

时间:2017-05-18 10:41:19

标签: scala apache-spark

从以下内容中,我如何获得具有最高价值的元组?

Array[(String, Int)] = Array((a,30),(b,50),(c,20))

在此示例中,我想要的结果是(b,50)

5 个答案:

答案 0 :(得分:5)

您可以使用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)))

答案 1 :(得分:2)

如果您不熟悉,我应该告诉您,您必须尽可能多地使用Dataframe,与RDD相比,它们具有很多优势{{1}你可以得到这样的最大值:

Dataframe

这应该有效,至少对我有用。希望这能帮到你

答案 2 :(得分:1)

如果元素总是两个元素的元组,你可以简单地:

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

正如docs

中所述

答案 3 :(得分:0)

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)))

答案 4 :(得分:0)

rdd.reduceByKey((A,B)=&gt;一种+ B).collect.maxBy(_._ 2)

我们可以像这样使用maxBy