В приведенном ниже коде я могу упорядочить список по «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))
Вы можете использовать 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))