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))

代码说明:

  1. 使用 Map 存储省份、商品和点击次数数据。
  2. 使用 map 函数将数据格式转换为 (省份, (商品, 点击次数)) 的形式。
  3. 使用 groupBy 函数将数据按省份分组。
  4. 使用 map 函数统计每个省份所有商品的点击次数总和。
  5. 使用 sortBy 函数将统计结果按点击次数升序排序。
  6. 使用 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)
  }
}
Spark Scala:统计不同省份商品点击数量并排序

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

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