Scala 获取与Spark中的最大值关联的所有关键帧
我有一个RDD,我想找到所有具有最大值的键。 所以如果我有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。我尝试的每个解决方案中的问题是
( ((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)