Scala-集合案例词频统计(WordCount)

普通 WordCount 案例

单词计数:将集合中出现的相同的单词,进行计数,取计数排名前三的结果。

//定义数据
    val stringList : List[String] = List("hello spark","scala yes","hello java","java yes","hello scala","scala yes","java yes","hello java")

    //1.对字符进行切分 得到一个打散所有单词的列表
//    val wordList1 : List[Array[String]] = stringList.map(_.split(" ")) //切分
//    val wordList2 : List[String] = wordList1.flatten
    //使用简化步骤
    val wordList = stringList.flatMap(_.split(" "))
    println(wordList)

    //2.相同单词进行分组
    val gp : Map[String,List[String]] = wordList.groupBy(w => w)
    println(gp)

    //3.对分组之后的list取长度,得到每个单词的个数
    val count: Map[String,Int] = gp.map(kv => (kv._1,kv._2.length))

    //4.将map转换为list, 并转换取前3个元素
    val sortList : List[(String,Int)] = count.toList
      .sortWith(_._2>_._2)
      .take(3) //选出前3

    //输出
    println(sortList)

复杂 WordCount 案例

 方法1:

//定义数据
    val stringList : List[(String,Int)] = List(("hello spark",1),("scala java",2),("hello scala",1),("java spark",2))

    val stringList1 :List[String] = stringList.map(kv => {
      (kv._1.trim + " ") * kv._2 //使用trim方法避免空白符
    })
    println(stringList1)

    //1.对字符进行切分 得到一个打散所有单词的列表
    val wordList = stringList1.flatMap(_.split(" "))
    println(wordList)

    //2.相同单词进行分组
    val gp : Map[String,List[String]] = wordList.groupBy(w => w)
    println(gp)

    //3.对分组之后的list取长度,得到每个单词的个数
    val count: Map[String,Int] = gp.map(kv => (kv._1,kv._2.length))

    //4.将map转换为list, 并转换取前3个元素
    val sortList : List[(String,Int)] = count.toList
      .sortWith(_._2>_._2)
      .take(3) //选出前3

    //输出
    println(sortList)

方法2:

val tuples = List(("Hello Scala Spark World", 4), ("Hello Scala Spark", 3), ("Hello Scala", 2), ("Hello", 1))
      val wordToCountList: List[(String, Int)] = tuples.flatMap
      {
      t => {
      val strings: Array[String] = t._1.split(" ")
      strings.map(word => (word, t._2))
      }
      }
      val wordToTupleMap: Map[String, List[(String, Int)]] =
      wordToCountList.groupBy(t=>t._1)
      val stringToInts: Map[String, List[Int]] =
      wordToTupleMap.mapValues {
      datas => datas.map(t => t._2)
      }
      stringToInts

    val wordToCountMap: Map[String, List[Int]] =
    wordToTupleMap.map {
    t => {
      (t._1, t._2.map(t1 => t1._2))
      }
    }
    val wordToTotalCountMap: Map[String, Int] =
    wordToCountMap.map(t=>(t._1, t._2.sum))
    println(wordToTotalCountMap)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

open_test01

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

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

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

打赏作者

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

抵扣说明:

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

余额充值