scala中map降序输出
时间: 2023-07-31 17:13:37 浏览: 76
在 Scala 中,可以使用 `sortBy` 函数和 `reverse` 函数来实现按照 map 值的降序输出。具体实现代码如下:
```scala
val map = Map("a" -> 3, "b" -> 1, "c" -> 2)
val sortedMap = map.toSeq.sortBy(-_._2).toMap
println(sortedMap)
```
输出结果为:
```
Map(a -> 3, c -> 2, b -> 1)
```
解释一下上面的代码:`map.toSeq` 将 map 转换成一个元素为键值对的序列,`sortBy` 函数用 `-` 来指定降序排列,最后的 `toMap` 函数将排序后的序列转换回 map。
相关问题
请创建一个scala代码读入该文件并统计每个单词的数量,按照数量的降序排序输出。
好的,以下是Scala代码实现:
```scala
import scala.io.Source
object WordCount {
def main(args: Array[String]): Unit = {
val filename = "path/to/your/file.txt"
val words = Source.fromFile(filename).getLines.flatMap(_.split("\\W+"))
val wordCount = words.foldLeft(Map.empty[String, Int]) {
(count, word) => count + (word -> (count.getOrElse(word, 0) + 1))
}
val sortedWordCount = wordCount.toSeq.sortWith(_._2 > _._2)
sortedWordCount.foreach { case (word, count) => println(s"$word: $count") }
}
}
```
其中,`filename` 是你要统计的文件名或路径,可以根据实际情况进行修改。代码首先使用 `Source.fromFile` 读取文件内容,然后使用 `flatMap` 将每行内容按照非单词字符分割成一个个单词,最后使用 `foldLeft` 统计每个单词出现的次数。最后将结果转换成一个序列,并按照单词数量降序排序,最终输出每个单词及其出现次数。
任务描述 本关任务:使用 Spark Core 知识编写一个词频统计程序。 编程要求 请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下: 对文本文件内的每个单词都统计出其出现的次数。 按照每个单词出现次数的数量,降序排序。 文本文件内容如下: hello java hello python java hello python python hello flink scala scala scala scala scala 说明:单词与单词之间以空格进行分割。 测试说明 补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。 测试输入:无 预期输出: (scala,5) (hello,4) (python,3) (java,2) (flink,1)
```scala
import org.apache.spark.{SparkConf, SparkContext}
object WordCount {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("WordCount").setMaster("local")
val sc = new SparkContext(conf)
val input = sc.textFile("file:///root/data/wordcount.txt")
val words = input.flatMap(line => line.split(" "))
val counts = words.map(word => (word, 1)).reduceByKey((a, b) => a + b)
val sortedCounts = counts.map(item => item.swap).sortByKey(false).map(item => item.swap)
val top5 = sortedCounts.take(5)
top5.foreach(item => println(item))
}
// Begin
// 补充代码
// 对文本文件内的每个单词都统计出其出现的次数。
// 按照每个单词出现次数的数量,降序排序。
// End
}
```
补充代码如下:
```scala
val counts = words.map(word => (word, 1)).reduceByKey((a, b) => a + b)
val sortedCounts = counts.map(item => item.swap).sortByKey(false).map(item => item.swap)
```
解释:
1. 首先对每个单词进行计数,得到一个元组 (word, count)。
2. 接着将元组中的 key 和 value 交换位置,即得到 (count, word) 的元组。
3. 对 (count, word) 的元组按照 count 进行降序排序。
4. 最后再将 (count, word) 的元组中的 key 和 value 交换位置,得到 (word, count) 的元组,即为按照单词出现次数降序排列的结果。