Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 获取与Spark中的最大值关联的所有关键帧_Scala_Apache Spark_Rdd - Fatal编程技术网

Scala 获取与Spark中的最大值关联的所有关键帧

Scala 获取与Spark中的最大值关联的所有关键帧,scala,apache-spark,rdd,Scala,Apache Spark,Rdd,我有一个RDD,我想找到所有具有最大值的键。 所以如果我有 ( ((A), 5), ((B), 4), ((C), 5)) ) 那我想回去 ( ((A), 5), ((C), 5)) ) 编辑;马克斯比只给了一把钥匙,所以我认为这不管用 我试过了 newRDD = oldRDD.sortBy(._2, false).filter{._2 == _.first}¨ 及 其中我知道u.first和u.MaxBy不起作用,但是应该从oldRDD获取maxValue。我尝试的每个解决方案中的问题是

我有一个RDD,我想找到所有具有最大值的键。 所以如果我有

( ((A), 5), ((B), 4), ((C), 5)) )
那我想回去

( ((A), 5), ((C), 5)) )
编辑;马克斯比只给了一把钥匙,所以我认为这不管用

我试过了

newRDD = oldRDD.sortBy(._2, false).filter{._2 == _.first}¨


其中我知道u.first和u.MaxBy不起作用,但是应该从oldRDD获取maxValue。我尝试的每个解决方案中的问题是,我无法访问过滤器中的最大值。我也相信我尝试的第二个“解决方案”比第一个要快得多,因为sortBy并不是真的需要

我不熟悉spark/RDD。在纯Scala中,我将执行以下操作:

scala> val max = ds.maxBy (_._2)._2
max: Int = 5

scala> ds.filter (_._2 == max)
res207: List[(String, Int)] = List((A,5), (C,5))
设置为:

scala> val (a, b, c) = ("A", "B", "C")
a: String = A
b: String = B
c: String = C

scala> val ds = List ( ((a), 5), ((b), 4), ((c), 5))
ds: List[(String, Int)] = List((A,5), (B,4), (C,5))

这里有一个答案。逻辑相当简单:

val rdd = sc.parallelize(Seq(("a", 5), ("b", 4), ("c", 5)))

// first get maximum value
val maxVal = rdd.values.max

//  now filter to those elements with value==max value
val rddMax = rdd.filter { case (_, v) => v == maxVal }
rddMax.take(10)

您是否尝试过使用
maxBy
?一般来说,我们希望后面跟着我尝试过-,@user6910411没有包含在
want{…}try{…}catch{…}
-块中的每个问题都是语法错误?;)
val rdd = sc.parallelize(Seq(("a", 5), ("b", 4), ("c", 5)))

// first get maximum value
val maxVal = rdd.values.max

//  now filter to those elements with value==max value
val rddMax = rdd.filter { case (_, v) => v == maxVal }
rddMax.take(10)