使用 Scala 统计不同省份商品点击总数并排序

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

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

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)

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

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

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

Scala 代码:

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

// 转换数据格式,将元组中的第一个和第二个元素拆开,变成三个元素的元组
val newData = data.map{case ((province, product), clickNum) => (province, product, clickNum)}

// 按省份进行分组
val groupData = newData.groupBy(_._1)

// 统计每个省份所有商品点击数量的总数
val resultData = groupData.map{case (province, productList) => (province, productList.map(_._3).sum)}

// 对结果进行升序排序
val sortedResult = resultData.toList.sortBy(_._2)

// 输出结果
println(resultData)
println(sortedResult)

代码解释:

  1. **data:**定义一个 Map 集合来存储原始数据,每个元素包含省份、商品名称和点击次数。
  2. **newData:**使用 map 函数对原始数据进行转换,将每个元素拆分成省份、商品名称和点击次数,形成一个新的元组。
  3. **groupData:**使用 groupBy 函数对转换后的数据按省份进行分组。
  4. **resultData:**使用 map 函数对分组后的数据进行统计,计算每个省份所有商品的点击次数之和。
  5. **sortedResult:**使用 toListsortBy 函数将结果转换为 List 并按照点击次数升序排序。
  6. **println:**输出最终的统计结果和排序结果。

总结:

本代码利用 Scala 的模式匹配、分组、统计和排序等功能,实现了对不同省份商品点击总数的统计和排序。代码清晰易懂,可读性强。

注意:

本代码仅供参考,实际应用中需要根据具体需求进行修改。

希望本代码能够帮助您理解 Scala 的数据处理和排序操作。

Scala 实现不同省份商品点击总数统计与排序

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

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