Spark: отсортировать список по строке

В приведенном ниже коде я могу упорядочить список по «sortByKey». Однако требуется сортировка по строке в алфавитном порядке.

Ожидаемый результат должен быть:

Array((3,book),(2,cat),(7,cup),(5,heater),(6,mouse),(1,screen),(4,tv)) 


scala> val randRDD = sc.parallelize(List( (2,"cat"), (6, "mouse"),(7, "cup"), (3, "book"), (4, "tv"), (1, "screen"), (5, "heater")), 3)
randRDD: org.apache.spark.rdd.RDD[(Int, String)] = ParallelCollectionRDD[0] at parallelize at <console>:27

scala> randRDD.collect
res0: Array[(Int, String)] = Array((2,cat), (6,mouse), (7,cup), (3,book), (4,tv), (1,screen), (5,heater))

scala> randRDD.sortByKey().collect
res1: Array[(Int, String)] = Array((1,screen), (2,cat), (3,book), (4,tv), (5,heater), (6,mouse), (7,cup))
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
0
2 587
1

Ответы 1

Вы можете использовать sortBy как

randRDD.sortBy(_._2).collect
//res2: Array[(Int, String)] = Array((3,book), (2,cat), (7,cup), (5,heater), (6,mouse), (1,screen), (4,tv))

или же

Просто использовать два обмена, один перед sortByKey и еще один после sortByKey

randRDD.map(_.swap).sortByKey().map(_.swap).collect
//res2: Array[(Int, String)] = Array((3,book), (2,cat), (7,cup), (5,heater), (6,mouse), (1,screen), (4,tv))

Другие вопросы по теме