Scala 统计不同省份商品点击总数并排序
使用 Scala 统计不同省份商品点击总数并排序
本示例使用 Scala 代码统计不同省份商品的点击总数,并按升序排序输出。原始数据存储在 Map 集合中,代码示例展示了数据格式转换、分组、统计和排序的步骤。
原始数据
val data = Map((("吉林", "玉米"), 2),
(("吉林", "袜子"), 10),
(("河南", "山药"), 18),
(("河南", "鞋"), 3),
(("河南", "衣服"), 9),
(("河北", "箱包"), 11),
(("河北", "鸭梨"), 5),
(("吉林", "木耳"), 7))
代码示例
object ClickCount {
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, (product, clickCount)) }
// 按省份分组
val groupData = clickData.groupBy(_._1)
// 统计每个省份所有商品点击数量的总数
val countData = groupData.map { case (province, productList) =>
val clickCount = productList.map(_._2._2).sum
(province, clickCount)
}
// 按升序排序
val sortedData = countData.toList.sortBy(_._2)
// 输出结果
println(countData)
println(sortedData)
}
}
代码解析
- 转换数据格式: 将原始数据格式转换成方便处理的格式,即将省份作为键,商品和点击数量作为值。
val clickData = data.map { case ((province, product), clickCount) => (province, (product, clickCount)) }
- 按省份分组: 使用
groupBy方法将数据按省份进行分组。
val groupData = clickData.groupBy(_._1)
- 统计每个省份所有商品点击数量的总数: 使用
map方法遍历每个省份的分组数据,并使用map和sum方法统计每个省份所有商品的点击总数。
val countData = groupData.map { case (province, productList) =>
val clickCount = productList.map(_._2._2).sum
(province, clickCount)
}
- 按升序排序: 使用
toList方法将countData转换成List,然后使用sortBy方法按点击总数升序排序。
val sortedData = countData.toList.sortBy(_._2)
注意事项
- 在进行模式匹配时,需要使用
case ((province, product), clickCount) =>的形式,将键值对拆分成省份、商品和点击数量三个部分。 - 在统计每个省份所有商品点击数量的总数时,需要使用
productList.map(_._2._2).sum的形式,将每个商品的点击数量取出并求和。
输出结果
Map(河南 -> 30, 吉林 -> 19, 河北 -> 16)
List((河北,16), (吉林,19), (河南,30))
希望这个示例能够帮助你理解如何使用 Scala 代码统计不同省份商品的点击总数并排序。
原文地址: https://www.cveoy.top/t/topic/kv0f 著作权归作者所有。请勿转载和采集!