要求只使⽤scala不使用spark算子实现统计⽂本⽂件:1. 出现了多少单词2.每个单词出现的次数 3.再根据单词出现的次数倒序排列。
时间: 2023-12-09 16:06:05 浏览: 79
以下是使用 Scala 实现的统计文本文件的代码,不依赖于 Spark 算子:
```scala
import scala.io.Source
object WordCount {
def main(args: Array[String]): Unit = {
// 读取文件内容
val text = Source.fromFile("input.txt").getLines().toList.mkString(" ")
// 将单词转换为小写,并按空格分割成数组
val words = text.toLowerCase.split("\\s+")
// 计算出现次数
val wordCount = words.groupBy(identity).mapValues(_.size)
// 按出现次数倒序排序
val wordCountSorted = wordCount.toList.sortBy(-_._2)
// 输出结果
println(s"Total words: ${words.length}")
println("Word count:")
wordCountSorted.foreach { case (word, count) => println(s"$word: $count") }
}
}
```
假设文件名为 `input.txt`,将其放在程序所在目录下。运行程序即可输出结果。
相关问题
要求⽤scala不使用spark算子实现统计⽂本⽂件: 1.出现了多少单词 2.出现了每个单词出现的次数 3.再根据单词出现的次数倒序排列。
可以使用Scala内置的函数库来实现这个需求。
1. 统计单词数量
可以使用以下代码来统计单词数量:
```scala
val filePath = "path/to/file.txt"
val lines = scala.io.Source.fromFile(filePath).getLines().toSeq
val words = lines.flatMap(_.split("\\W+"))
val wordCount = words.length
```
2. 统计每个单词出现的次数
可以使用以下代码来统计每个单词出现的次数:
```scala
val wordCounts = words.groupBy(identity).mapValues(_.size)
```
3. 根据单词出现次数倒序排列
可以使用以下代码根据单词出现次数倒序排列:
```scala
val sortedWordCounts = wordCounts.toSeq.sortWith(_._2 > _._2)
```
完整代码如下:
```scala
val filePath = "path/to/file.txt"
val lines = scala.io.Source.fromFile(filePath).getLines().toSeq
val words = lines.flatMap(_.split("\\W+"))
val wordCount = words.length
val wordCounts = words.groupBy(identity).mapValues(_.size)
val sortedWordCounts = wordCounts.toSeq.sortWith(_._2 > _._2)
println(s"Total number of words: $wordCount")
println("Word counts:")
sortedWordCounts.foreach { case (word, count) =>
println(s"$word: $count")
}
```
要求不使用spark算子只使⽤scala实现统计⽂本⽂件:1. 出现了多少单词2.每个单词出现的次数 再根据单词出现的次数倒序排列
可以使用Scala中的集合和文件操作来实现这个需求,以下是一个示例代码:
```scala
import scala.io.Source
// 读取文本文件内容
val text = Source.fromFile("input.txt").mkString
// 将文本内容转换为单词列表
val words = text.split("\\W+")
// 统计单词出现次数
val wordCounts = words.groupBy(identity).mapValues(_.length)
// 按照单词出现次数倒序排序
val sortedWordCounts = wordCounts.toSeq.sortBy(-_._2)
// 输出结果
println(s"Total number of words: ${words.length}")
println("Word counts:")
sortedWordCounts.foreach { case (word, count) => println(s"$word: $count") }
```
这段代码首先使用`Source.fromFile`方法读取输入文件的内容,并使用`split`方法将其转换为单词列表。然后使用`groupBy`方法和`mapValues`方法统计每个单词出现的次数,并将结果保存在`wordCounts`变量中。最后,使用`toSeq`方法将`wordCounts`转换为元素类型为`(String, Int)`的序列,并使用`sortBy`方法按照第二个元素(即单词出现次数)进行倒序排序,将结果保存在`sortedWordCounts`变量中。最后,使用`foreach`方法将排好序的单词及其出现次数输出到控制台。
阅读全文