Como encontrar o valor máximo no par RDD?

Eu tenho um par de faíscas RDD (key, count) como abaixo

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

Como encontrar a chave com maior contagem usando a API spark scala?

EDIT: tipo de dados do par RDD é org.apache.spark.rdd.RDD [(String, Int)]

Use o método Array.maxBy :

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

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

Para o Pyspark:

Seja a par o RDD com chaves como String e valores como inteiros então

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

retorna o par de valores da chave com o valor máximo. Basicamente as ordens max da function pelo valor de retorno da function lambda.

Aqui a é um par RDD com elementos como ('key',int) e x[1] apenas se refere à parte inteira do elemento.

Note que a function max por si só irá ordenar por chave e retornar o valor máximo.

A documentação está disponível em https://spark.apache.org/docs/1.5.0/api/python/pyspark.html#pyspark.RDD.max

Os RDDs Spark são mais eficientes no tempo quando são deixados como RDD e não transformados em Matrizes

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