要求⽤scala实现统计⽂本⽂件: 出现了多少单词出现了 每个单词出现的次数 再根据单词出现的次数倒序排列。
时间: 2023-11-24 20:08:22 浏览: 156
以下是Scala实现的代码:
```scala
import scala.io.Source
object WordCount {
def main(args: Array[String]): Unit = {
val filename = args(0)
val lines = Source.fromFile(filename).getLines().toList
val words = lines.flatMap(_.split("\\W+")).filter(_ != "").map(_.toLowerCase)
val wordCounts = words.groupBy(identity).mapValues(_.size)
val sortedWordCounts = wordCounts.toSeq.sortWith(_._2 > _._2)
for ((word, count) <- sortedWordCounts) {
println(s"$word: $count")
}
println(s"Total words: ${words.length}")
println(s"Distinct words: ${wordCounts.size}")
}
}
```
这个程序读取一个文本文件,并统计出现的单词以及每个单词出现的次数。它还输出了总共出现的单词数和不同单词的数目。最后,它按照单词出现的次数倒序排列,并打印每个单词和它的计数。
相关问题
要求⽤scala实现统计⽂本⽂件: 出现了多少单词出现了15 每个单词出现的次数 再根据单词出现的次数倒序排列
以下是使用 Scala 实现统计文本文件中单词出现次数的代码,其中假设文本文件路径为 `file.txt`:
```scala
import scala.io.Source
object WordCount {
def main(args: Array[String]): Unit = {
val filename = "file.txt"
val lines = Source.fromFile(filename).getLines().toList
val words = lines.flatMap(line => line.split("\\W+"))
val wordCounts = words.groupBy(w => w).mapValues(_.length).toList
val filteredWordCounts = wordCounts.filter { case (w, c) => c >= 15 }
val sortedWordCounts = filteredWordCounts.sortBy { case (w, c) => -c }
println("Total number of words: " + words.length)
println("Number of words that appear at least 15 times: " + filteredWordCounts.length)
sortedWordCounts.foreach { case (w, c) => println(s"$w: $c") }
}
}
```
这个程序首先读取文本文件的所有行,并将每行的单词以空格、标点符号等为分隔符进行拆分。然后将所有单词按照出现次数进行分组,并统计每个单词出现的次数。接着过滤出出现次数不少于 15 次的单词,并按照出现次数倒序排列。最后输出所有单词及其出现次数。
注意,这个实现中使用了 Scala 的集合操作和函数式编程特性,比如 `flatMap`、`groupBy`、`mapValues`、`filter` 和 `sortBy` 等。这些操作和函数可以让代码更加简洁、易读和易于维护。
项目要求不使用spark算子只使⽤scala实现统计⽂本⽂件: 出现了多少单词每个单词出现的次数 再根据单词出现的次数倒序排列。
实现这个需求可以通过以下步骤:
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`循环输出排序后的结果。
阅读全文