Как найти максимальное значение в паре RDD?
У меня есть искровая пара RDD (ключ, счет), как показано ниже
Array[(String, Int)] = Array((a,1), (b,2), (c,1), (d,3))
Как найти ключ с наивысшим счетчиком с использованием искрового scala API?
EDIT: тип данных пары RDD – org.apache.spark.rdd.RDD [(String, Int)]
- Отменить в начале складки
- Запуск Java дает «Ошибка: не удалось открыть» C: \ Program Files \ Java \ jre6 \ lib \ amd64 \ jvm.cfg '"
- Список волшебных функций Scala
- Что такое запечатанная черта?
- scala.concurrent.blocking - что это на самом деле?
- В чем разница между JavaConverters и JavaConversions в Scala?
- Как работает магия метода Apply () Scala?
- Как установить размер кучи для sbt?
- Увеличить размер кучи JVM для Scala?
- Разница между Seq и списком в Scala
- Как предотвратить java.lang.OutOfMemoryError: пространство PermGen при компиляции Scala?
- Как разбирать JSON в Scala с использованием стандартных classов Scala?
- Валидация против дизъюнкции
Используйте метод Array.maxBy
:
val a = Array(("a",1), ("b",2), ("c",1), ("d",3)) val maxKey = a.maxBy(_._2) // maxKey: (String, Int) = (d,3)
или 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) })
Используйте 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))
Для Pyspark:
Пусть a
– пара RDD с ключами как String и значения как целые числа, тогда
a.max(lambda x:x[1])
возвращает пару значений ключа с максимальным значением. В основном максимальные функции заказываются по возвращаемому значению lambda-функции.
Здесь a
представляет собой пару RDD с такими элементами, как ('key',int)
а x[1]
просто ссылается на целую часть элемента.
Обратите внимание, что функция max
сама по себе будет заказывать ключом и возвращать максимальное значение.
Документацию можно найти на странице https://spark.apache.org/docs/1.5.0/api/python/pyspark.html#pyspark.RDD.max
Spark RDD более эффективны, когда они оставлены как RDD и не превращаются в массивы
strinIntTuppleRDD.reduce((x, y) => if(x._2 > y._2) x else y)