Scala 实现 WordCount 从详解到极简写法

Scala 实现 WordCount 从详解到极简写法

步骤详解

val dataList = List(
      ("Hello Scala", 4), ("Hello Spark", 2)
    )
    //第一步:将list中的每k-v对的key 按空格切分,并且组成新的 k-v组
    val kv_list = dataList.map(kv => kv._1.split(" ").map((_, kv._2)).toList) // .map(v => (v, kv._2)) 简写: map((_, kv._2))
    // 结果:List(List((Hello,4), (Scala,4)), List((Hello,2), (Spark,2)))

    //第二步:将k-v组拍平(把多个小集合,变成一个大集合) 变成 k-v对集合
    val kv_f = kv_list.flatten
    // 结果: List((Hello,4), (Scala,4), (Hello,2), (Spark,2))

    //第三步:将每个k-v对,按k分组
    val kv_group = kv_f.groupBy(_._1) // groupBy(r => r._1) 简写 groupBy(_._1)
    //结果:Map(Hello -> List((Hello,4), (Hello,2)), Spark -> List((Spark,2)), Scala -> List((Scala,4)))

    //第四步:对分类的 的每个组 求和,求出每个key的值
    val kv_value = kv_group.mapValues(_.map(_._2).sum)
    //结果:Map(Hello -> 6, Spark -> 2, Scala -> 4)

    //第五步:排序
    val kv_sort = kv_value.toList.sortBy(_._2)(Ordering Int).reverse
    //结果:List((Hello,6), (Scala,4), (Spark,2))

一把到底

   val dataList = List(
       ("Hello Scala", 4), ("Hello Spark", 2)
       
  dataList.map(kv => kv._1.split(" ").map((_, kv._2)))
      .flatten.groupBy(_._1)
      .mapValues(_.map(_._2).sum).toList
      .sortBy(_._2)(Ordering Int).reverse

更进一步简洁

   val dataList = List(
       ("Hello Scala", 4), ("Hello Spark", 2)
       
  dataList.flatMap(kv => kv._1.split(" ").map((_, kv._2)))
      .groupBy(_._1)
      .mapValues(_.map(_._2).sum).toList
      .sortBy(_._2)(Ordering Int).reverse
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值