WordCount

object Test09 extends  App {

  val lines = List("hello lisi","hello zhangsan lili","zhengsan","zhangsan lisi")
  println("lines = "+ lines)
  val lines_1 = lines.map(_.split(" "))
  println(lines_1)
  //List([Ljava.lang.String;@880ec60, [Ljava.lang.String;@3f3afe78, [Ljava.lang.String;@7f63425a, [Ljava.lang.String;@36d64342)
  lines_1.foreach(x=>x.foreach(x=>print(x+"\t"))+"\n")
  println()
 //._split(" ") 把list数组中的每一个元素 ,按照空格分开了每个元素,放在了 另一个小的list集合中  ,所以大的list 集合里面的四个元素,就变成了四个小的list 集合。要用两个foreach才可以访问到里面的元素
  //扁平化
  val lines_2 = lines_1.flatten
  println(lines_2)
  //List(hello, lisi, hello, zhangsan, lili, zhengsan, zhangsan, lisi)
  // 把 嵌套的list 集合 ,变成一个list 集合

  //==================================================
  //把上面两步 的map 和 flatten 合并成一步
  val words = lines.flatMap(_.split(" "))

  //变成key value 对应的形式 key为x  value为 1
  val wordsToOne = words.map(x=>(x,1))
  println(wordsToOne)
  //List((hello,1), (lisi,1), (hello,1), (zhangsan,1), (lili,1), (zhengsan,1), (zhangsan,1), (lisi,1))

  //================================================
  //以上步骤还可写为
  val word_to_one = words.map((_,1))

  // 下面需要把相同的合并
   val group = word_to_one.groupBy(_._1)  //根据list集合中的第一个元组,里的第一个元素分组 即key 分组
    println(group)
   //Map(lisi -> List((lisi,1), (lisi,1)), zhengsan -> List((zhengsan,1)), hello -> List((hello,1), (hello,1)), zhangsan -> List((zhangsan,1), (zhangsan,1)), lili -> List((lili,1)))
  //变成了key value 的形式 。 把key相同的放在了一起

  //用size 统计一下个数
  val group_1 = group.map(x=>(x._1,x._2.size))  // (x._1,x._2.size)  x._1这里代表取 元组 的第一个元素 即key ,x._2.size 这里代表取元组的第二个元素的个数。
  //刚开始会想这么写group.map(_.1 , _.2.size)  但是报错,因为这里有两个 _ 编译识别不了
  println(group_1)
  // Map(lisi -> 2, zhengsan -> 1, hello -> 2, zhangsan -> 2, lili -> 1)

  //将map 转换成list数组
  val result = group_1.toList
  println(result)
  //List((lisi,2), (zhengsan,1), (hello,2), (zhangsan,2), (lili,1))

  //排序
  val result_1 = result.sortBy(_._2).reverse
  println(result_1)
  // List((lisi,2), (zhengsan,1), (hello,2), (zhangsan,2), (lili,1))

  //拆分
  val finalResult = result_1.map(x=>(x._1+ "\t" + x._2))
  println(finalResult)
  // List(zhangsan	2, hello	2, lisi	2, lili	1, zhengsan	1)
  // 遍历
  finalResult.foreach(println)
  /*  zhangsan	2
  hello	2
  lisi	2
  lili	1
  zhengsan	1*/
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值