Spark Scala:统计不同省份商品点击数量并排序
object 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, (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)
}
}
运行结果:
HashMap(吉林 -> 19, 河南 -> 30, 河北 -> 16)
List((河北,16), (吉林,19), (河南,30))
代码说明:
- 使用
Map存储省份、商品和点击次数数据。 - 使用
map函数将数据格式转换为(省份, (商品, 点击次数))的形式。 - 使用
groupBy函数将数据按省份分组。 - 使用
map函数统计每个省份所有商品的点击次数总和。 - 使用
sortBy函数将统计结果按点击次数升序排序。 - 使用
println函数输出排序结果。
代码中的错误:
代码本身没有错误,但是输出结果中使用了错误的变量名。在代码中,应该将最后一行的 println(countData) 改为 println(sortedData),这样才能输出排序后的结果。
修正后的代码:
object 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, (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)
}
}
原文地址: https://www.cveoy.top/t/topic/kv1H 著作权归作者所有。请勿转载和采集!