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