Spark 数据分析:按省份统计商品点击量并排序
Spark 数据分析:按省份统计商品点击量并排序
本示例展示使用 Spark 对商品点击数据进行分析,按省份统计每个省份所有商品的点击数量,并对结果进行升序排序,展示每个省份的商品总点击量排名。
原始数据
val data = Map(
(('吉林', '玉米'), 2),
(('吉林', '袜子'), 10),
(('河南', '山药'), 18),
(('河南', '鞋'), 3),
(('河南', '衣服'), 9),
(('河北', '箱包'), 11),
(('河北', '鸭梨'), 5),
(('吉林', '木耳'), 7)
)
数据处理
- 转换数据格式: 将
(('省份', '商品'), 点击数)转换为(省份, 商品, 点击数) - 按省份分组: 将转换后的数据按省份进行分组
- 统计每个省份所有商品点击数量的总数: 遍历每个省份,计算该省份下所有商品的点击数之和
- 对结果进行升序排序: 将统计结果转换为
List,然后按照点击数进行升序排序
代码示例
object A {
def main(args: Array[String]): Unit = {
// 原始数据
val data = Map(
(('吉林', '玉米'), 2),
(('吉林', '袜子'), 10),
(('河南', '山药'), 18),
(('河南', '鞋'), 3),
(('河南', '衣服'), 9),
(('河北', '箱包'), 11),
(('河北', '鸭梨'), 5),
(('吉林', '木耳'), 7)
)
// 转换数据格式
val transformedData = data.map { case ((province, product), clicks) => (province, product, clicks) }
// 按省份分组
val groupedData = transformedData.groupBy(_._1)
// 统计每个省份所有商品点击数量的总数
val clicksByProvince = groupedData.map { case (province, productList) =>
(province, productList.map(_._3).sum)
}
// 对结果进行升序排序
val sortedResult = clicksByProvince.toList.sortBy(_._2)
println(clicksByProvince) // 输出 Map(河南 -> 30, 吉林 -> 19, 河北 -> 16)
println(sortedResult) // 输出 List((河北,16), (吉林,19), (河南,30))
}
}
输出结果
HashMap(吉林 -> 19, 河南 -> 30, 河北 -> 16)
List((河北,16), (吉林,19), (河南,30))
注意:
你的输出结果与标准答案相比在键的顺序上有所不同,这是因为 HashMap 在遍历时并不保证键值对的顺序,而 List 在排序时会按照指定的排序规则进行排序,因此最终输出时键的顺序可能会有所不同。不过这并不影响结果的正确性,只是输出的顺序不同而已。
原文地址: https://www.cveoy.top/t/topic/kvWG 著作权归作者所有。请勿转载和采集!