项目要求不使用spark算子只使⽤scala实现统计⽂本⽂件: 出现了多少单词每个单词出现的次数 再根据单词出现的次数倒序排列。
时间: 2023-11-25 19:05:02 浏览: 74
实现这个需求可以通过以下步骤:
1. 读取文本文件,将其转换为一个字符串。
2. 将字符串拆分为单词列表。
3. 遍历单词列表,使用Map统计每个单词出现的次数。
4. 将Map中的键值对转换为元组列表。
5. 对元组列表按照单词出现的次数进行降序排序。
6. 输出结果。
以下是实现代码示例:
```scala
import scala.io.Source
object WordCount {
def main(args: Array[String]): Unit = {
// 读取文本文件
val filename = "example.txt"
val fileContents = Source.fromFile(filename).mkString
// 将字符串拆分为单词列表
val words = fileContents.split("""\W+""")
// 使用Map统计每个单词出现的次数
val wordCounts = words.groupBy(word => word).mapValues(_.length)
// 将Map中的键值对转换为元组列表
val wordCountList = wordCounts.toList
// 对元组列表按照单词出现的次数进行降序排序
val sortedWordCountList = wordCountList.sortBy(_._2).reverse
// 输出结果
sortedWordCountList.foreach { case (word, count) =>
println(s"$word: $count")
}
}
}
```
其中,`Source.fromFile(filename).mkString`可以将文本文件中的内容读取为一个字符串。`split("""\W+""")`可以将字符串拆分为单词列表,其中`\W`表示非单词字符。`groupBy(word => word).mapValues(_.length)`可以使用Map统计每个单词出现的次数,其中`groupBy`会将单词列表按照单词分组,`mapValues(_.length)`会将每个分组中的单词列表转换为其长度,即出现次数。`toList`可以将Map中的键值对转换为元组列表。`sortBy(_._2).reverse`可以对元组列表按照第二个元素(出现次数)进行降序排序。最后,使用`foreach`循环输出排序后的结果。
阅读全文