使用spark-shell进行排序和合并

时间:2017-09-15 06:28:39

标签: scala apache-spark rdd

我在scala中有一个字符串数组

Array[String] = Array(apple, banana, oranges, grapes, lichi, anar)

我已将其转换为以下格式:

Array[(Int, String)] = Array((5,apple), (6,banana), (7,oranges), (6,grapes), (5,lichi), (4,anar))

我希望输出如下:

Array[(Int, String)] = Array((4,anar), (5,applelichi), (6,bananagrapes), (7,oranges))

表示排序后我想将相同的单词加在一起。 我做了整理。继承我的代码:

val a = sc.parallelize(List("apple","banana","oranges","grapes","lichi","anar"))
val b = a.map(x =>(x.length,x))
val c = b.sortBy(_._2)

1 个答案:

答案 0 :(得分:0)

您可以使用groupByKey()执行此操作,然后将您获得的列表与mkString合并。使用你拥有的东西的小例子(a,b是相同的):

val c = b.groupByKey().map{case (key, list) => (key, list.toList.sorted.mkString)}.sortBy(_._1)

c.collect() foreach println

哪个会给你:

(4,anar)
(5,applelichi)
(6,bananagrapes)
(7,oranges)