使用 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)
  }
}

代码解析

  1. 转换数据格式: 将原始数据格式转换成方便处理的格式,即将省份作为键,商品和点击数量作为值。
val clickData = data.map { case ((province, product), clickCount) => (province, (product, clickCount)) }
  1. 按省份分组: 使用 groupBy 方法将数据按省份进行分组。
val groupData = clickData.groupBy(_._1)
  1. 统计每个省份所有商品点击数量的总数: 使用 map 方法遍历每个省份的分组数据,并使用 mapsum 方法统计每个省份所有商品的点击总数。
val countData = groupData.map { case (province, productList) =>
      val clickCount = productList.map(_._2._2).sum
      (province, clickCount)
    }
  1. 按升序排序: 使用 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 代码统计不同省份商品的点击总数并排序。

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

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

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