web-dev-qa-db-fra.com

Comment trouver la valeur maximale dans la paire RDD?

J'ai un spark pair RDD (clé, count) comme ci-dessous

Array[(String, Int)] = Array((a,1), (b,2), (c,1), (d,3))

Comment trouver la clé avec le plus grand nombre en utilisant spark scala API?

EDIT: le type de données de la paire RDD est org.Apache.spark.rdd.RDD [(String, Int)]

15
Vijay Innamuri

Utilisation Array.maxBy méthode:

val a = Array(("a",1), ("b",2), ("c",1), ("d",3))
val maxKey = a.maxBy(_._2)
// maxKey: (String, Int) = (d,3)

ou RDD.max:

val maxKey2 = rdd.max()(new Ordering[Tuple2[String, Int]]() {
  override def compare(x: (String, Int), y: (String, Int)): Int = 
      Ordering[Int].compare(x._2, y._2)
})
21
Sergey Lagutin

Utilisez takeOrdered(1)(Ordering[Int].reverse.on(_._2)):

val a = Array(("a",1), ("b",2), ("c",1), ("d",3))
val rdd = sc.parallelize(a)
val maxKey = rdd.takeOrdered(1)(Ordering[Int].reverse.on(_._2))
// maxKey: Array[(String, Int)] = Array((d,3))
13
Jacek Laskowski

Pour Pyspark:

Soit a la paire RDD avec des clés sous forme de chaîne et des valeurs sous forme d'entiers, puis

a.max(lambda x:x[1])

renvoie la paire valeur-clé avec la valeur maximale. Fondamentalement, la fonction max est ordonnée par la valeur de retour de la fonction lambda.

Ici a est une paire RDD avec des éléments tels que ('key',int) et x[1] fait simplement référence à la partie entière de l'élément.

Notez que la fonction max seule triera par clé et renverra la valeur max.

La documentation est disponible sur https://spark.Apache.org/docs/1.5.0/api/python/pyspark.html#pyspark.RDD.max

6
Mayank

Les RDD Spark sont plus efficaces dans le temps lorsqu'ils sont laissés comme RDD et non transformés en tableaux

strinIntTuppleRDD.reduce((x, y) => if(x._2 > y._2) x else y)
4
Rubber Duck