我创建了一些scala代码行来计算文本文件(在Spark中)中的单词数。这样的结果:
(further,,1)
(Hai,,2)
(excluded,1)
(V.,5)
我想知道我能否对结果进行如下排序:
(V.,5)
(Hai,,2)
(excluded,1)
(further,,1)
下面显示的代码,谢谢您的帮助!
val wordCounts = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)
wordCounts.collect()
wordCounts.saveAsTextFile("./WordCountTest")
答案 0 :(得分:4)
如果要按第二个字段对第一个数据集进行排序,则可以使用以下代码:
val wordCounts = Seq(
("V.",5),
("Hai",2),
("excluded",1),
("further",1)
)
val wcOrdered = wordCounts.sortBy(_._2).reverse
产生以下结果
wcOrdered: Seq[(String, Int)] = List((V.,5), (Hai,2), (further,1), (excluded,1))
答案 1 :(得分:2)
您可以直接致电wordCounts.sortBy(_._2, false)
。来自 RDD 的方法 sortBy 以布尔值作为第二个参数,它告诉结果是升序( true -默认值)还是降序(< em> false )。
textFile
.flatMap(_.split(" "))
.map(word => (word, 1))
.reduceByKey(_ + _)
.sortBy(_._2, false)