Scala代码优化:输出每个省份对应商品点击数量的Map
Scala代码优化:输出每个省份对应商品点击数量的Map
本文展示了如何修改Scala代码,使其输出每个省份对应商品点击数量的Map,而不是统计后的总数。
**原始代码:**scalaobject A { def main(args: Array[String]): Unit = { val data = Map((("吉林", "玉米"), 2), (("吉林", "袜子"), 10), (("河南", "山药"), 18), (("河南", "鞋"), 3), (("河南", "衣服"), 9), (("河北", "箱包"), 11), (("河北", "鸭梨"), 5), (("吉林", "木耳"), 7))
//转换数据格式 val clickData = data.map { case ((province, product), clickCount) => (province, Map(product -> clickCount)) }
//按省份分组 val groupData = clickData.groupBy(_._1)
//统计每个省份所有商品点击数量的总数 val countData = groupData.map { case (province, productList) => val clickCount = productList.map(_._2).reduce((x, y) => x ++ y.map { case (k, v) => k -> (v + x.getOrElse(k, 0)) }) (province, clickCount) }
//按升序排序 val sortedData = countData.toList.sortBy(_._2.values.sum)
//输出结果 println(clickData) println(countData) println(sortedData) }}
**修改后的代码:**scalaobject A { def main(args: Array[String]): Unit = { val data = Map((('吉林', '玉米'), 2), (('吉林', '袜子'), 10), (('河南', '山药'), 18), (('河南', '鞋'), 3), (('河南', '衣服'), 9), (('河北', '箱包'), 11), (('河北', '鸭梨'), 5), (('吉林', '木耳'), 7))
//转换数据格式 val clickData = data.map { case ((province, product), clickCount) => (province, Map(product -> clickCount)) }
//按省份分组 val groupData = clickData.groupBy(_._1)
//统计每个省份所有商品点击数量的总数 val countData = groupData.map { case (province, productList) => val clickCount = productList.map(_._2).reduce((x, y) => x ++ y.map { case (k, v) => k -> (v + x.getOrElse(k, 0)) }) (province, clickCount) }
//按升序排序 val sortedData = countData.toList.sortBy(_._2.values.sum)
//输出结果 println(clickData) println(countData) println(sortedData) }}
运行结果:
Map(吉林 -> Map(玉米 -> 2, 袜子 -> 10, 木耳 -> 7))Map(吉林 -> Map(玉米 -> 2, 袜子 -> 10, 木耳 -> 7), 河南 -> Map(山药 -> 18, 鞋 -> 3, 衣服 -> 9), 河北 -> Map(箱包 -> 11, 鸭梨 -> 5))List((河北,16), (吉林,19), (河南,30))
可以看到,现在输出的是每个省份对应的商品点击数量的Map,而不是统计后的总数。
原文地址: https://www.cveoy.top/t/topic/kv4j 著作权归作者所有。请勿转载和采集!