Scala 统计不同省份商品点击总数并排序:数据处理与排序

**需求:**根据下列不同省份的商品点击数据,完成对不同省份商品的点击总数进行统计并按升序进行排序输出。(难度指数★★★★)

**说明:**数据存放到 Map 集合中,具体格式如下:

val data = Map((('吉林','玉米'),2),
               (('吉林','袜子'),10),
               (('河南','山药'),18),
               (('河南','鞋'),3),
               (('河南','衣服'),9),
               (('河北','箱包'),11),
               (('河北','鸭梨'),5),
               (('吉林','木耳'),7)
              )

输出结果:

Map(河南 -> 30, 吉林 -> 19, 河北 -> 16)
List((河北,16), (吉林,19), (河南,30))

提示:

① 进行原始数据格式的转换(通过模式匹配完成)。 例如:(('吉林','玉米'),2)--->('吉林','玉米',2) (('吉林','袜子'),10)---->'吉林','袜子',10) (('河南','山药'),18)---->'河南','山药',18) (('河南','鞋'),3)------>'河南','鞋',3)

② 对转换后的数据按省份进行分组。

③ 对分组后的数据,统计每个省份所有商品点击数量的总数。

④ 对③的结果进行升序排序。

完整代码内容:

val data = Map((('吉林','玉米'),2),
               (('吉林','袜子'),10),
               (('河南','山药'),18),
               (('河南','鞋'),3),
               (('河南','衣服'),9),
               (('河北','箱包'),11),
               (('河北','鸭梨'),5),
               (('吉林','木耳'),7)
              )

// 转换数据格式
val newData = data.map{case ((province, item), count) => (province, (item, count))}

// 分组并统计点击总数
val result = newData.groupBy(_._1).mapValues(_.map(_._2).reduce((x, y) => (x._1 + y._1, x._2 + y._2)))

// 按升序排序并输出结果
val sortedResult = result.toList.sortBy(_._2._2)
println(result)
println(sortedResult)

代码解析:

  1. 数据格式转换: newData 使用 map 函数将原始数据格式转换为 (省份, (商品, 点击数)) 的元组形式。
  2. 分组统计: result 使用 groupBy 函数按省份进行分组,并使用 mapValues 函数对每个省份的数据进行统计。reduce 函数用于累加每个省份所有商品的点击总数。
  3. 排序输出: sortedResult 使用 toListresult 转换为列表,并使用 sortBy 函数根据点击总数进行升序排序。最后,输出 resultsortedResult 的结果。
Scala 统计不同省份商品点击总数并排序:数据处理与排序

原文地址: https://www.cveoy.top/t/topic/kwpG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录