Scala 的wordCount

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)

  }
}

运行结果:


我是一个底线——

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liangzai2048

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值