Scala 的wordCount
使用java的方式统计单词的数量
val hashMap = new util.HashMap[String, Integer]()
val bufferedReader = new BufferedReader(new FileReader("data/words.txt"))
var line: String = bufferedReader.readLine()
while (line != null) {
val split: Array[String] = line.split(",")
for (word <- split) {
// 判断map集合中是否存在这个单词
if (hashMap.containsKey(word)) {
// 取出之前统计的结果
val count: Integer = hashMap.get(word)
// 在之前的基础上加一
hashMap.put(word, count + 1)
} else {
// 如果单词在hashMap中不存在一个一个进去
hashMap.put(word, 1)
}
}
line = bufferedReader.readLine()
}
println(hashMap)
使用scala的方式统计单词的数量
// 1、读取文件
val lines: List[String] = Source.fromFile("data/words.txt").getLines().toList
// 2、将一行中的多个单词拆分出来,每个单词一行
val words: List[String] = lines.flatMap(line => line.split(","))
/**
*
* groupBy: 指定一个字段进行分组
*
* 返回一个map集合
* map集合的key 是分组的字段
* map集合的values是组内所有的元素
*
*/
// 3、按照单词分组,将同一个单词分到同一个组内
val groupBuy: Map[String, List[String]] = words.groupBy((word: String) => word)
// 4、统计分组的单词数量
val wordCount: Map[String, Int] = groupBuy.map(kv => {
// key
val word: String = kv._1
// 组内所有单词
val values: List[String] = kv._2
// 计算单词的数量
val count: Int = values.length
// 返回结果
(word, count)
})
wordCount.foreach(println)
链式调用(spark)
Source.fromFile("data/words.txt")
.getLines()
.toList
.flatMap(_.split(",")) // 将一行转换成多行
.groupBy(w => w) // 按照单词分组
.map(kv => (kv._1,kv._2.length)) // 统计单词的数量
.foreach(println)
import java.io.{BufferedReader, FileReader}
import java.util
import scala.io.Source
object wordCount {
def main(args: Array[String]): Unit = {
/**
* 使用java的方式统计单词的数量
*
*/
val hashMap = new util.HashMap[String, Integer]()
val bufferedReader = new BufferedReader(new FileReader("data/words.txt"))
var line: String = bufferedReader.readLine()
while (line != null) {
val split: Array[String] = line.split(",")
for (word <- split) {
// 判断map集合中是否存在这个单词
if (hashMap.containsKey(word)) {
// 取出之前统计的结果
val count: Integer = hashMap.get(word)
// 在之前的基础上加一
hashMap.put(word, count + 1)
} else {
// 如果单词在hashMap中不存在一个一个进去
hashMap.put(word, 1)
}
}
line = bufferedReader.readLine()
}
println(hashMap)
println("=" * 100)
/**
* scala 统计单词数量
*
*/
// 1、读取文件
val lines: List[String] = Source.fromFile("data/words.txt").getLines().toList
// 2、将一行中的多个单词拆分出来,每个单词一行
val words: List[String] = lines.flatMap(line => line.split(","))
/**
*
* groupBy: 指定一个字段进行分组
*
* 返回一个map集合
* map集合的key 是分组的字段
* map集合的values是组内所有的元素
*
*/
// 3、按照单词分组,将同一个单词分到同一个组内
val groupBuy: Map[String, List[String]] = words.groupBy((word: String) => word)
// 4、统计分组的单词数量
val wordCount: Map[String, Int] = groupBuy.map(kv => {
// key
val word: String = kv._1
// 组内所有单词
val values: List[String] = kv._2
// 计算单词的数量
val count: Int = values.length
// 返回结果
(word, count)
})
wordCount.foreach(println)
println("=" * 100)
/**
*
* 链式调用
*
*/
Source.fromFile("data/words.txt")
.getLines()
.toList
.flatMap(_.split(",")) // 将一行转换成多行
.groupBy(w => w) // 按照单词分组
.map(kv => (kv._1,kv._2.length)) // 统计单词的数量
.foreach(println)
}
}
运行结果:
我是一个底线——
Scala WordCount对比:Java实现与Spark链式操作
本文探讨了如何使用Java和Scala两种方式实现单词计数,并展示了Scala中利用Spark的链式调用来简化过程。通过实例展示了从文件读取、单词拆分、分组统计到结果输出的全过程。
2796

被折叠的 条评论
为什么被折叠?



