Apache Spark结合类型与子类型分组:基于指定数据集的实现问询
在Apache Spark中结合类型(media)与子类型(action)分组的实现方案
嘿,这事儿其实很容易扩展你现有的代码!你已经掌握了按city和media分组的方法,要结合media(类型)和action(子类型)分组,主要有两种常见的实现方式,我给你详细拆解下:
方案1:直接将action加入分组键
最直接的方式就是把action字段也添加到groupBy的参数列表里,这样就能实现按城市、媒体类型、操作子类型的组合维度进行分组。如果你还是想统计每组的条数,可以继续用count();如果需要对amount做聚合(比如求和),可以换成sum("amount")这类函数。
代码示例
// 按city、media、action分组,统计每组的记录数 val groupByCityMediaAction = sales .groupBy("city", "media", "action") .count() groupByCityMediaAction.show()
输出示例
+-------+--------+------+-----+ | city| media|action|count| +-------+--------+------+-----+ | Warsaw|facebook| share| 1| | Warsaw|facebook| like| 1| | Boston| twitter| share| 1| | Boston|facebook| share| 1| |Toronto| twitter| like| 1| +-------+--------+------+-----+
如果需要聚合amount字段(比如求和),可以修改成这样:
val groupByWithSum = sales .groupBy("city", "media", "action") .sum("amount") .withColumnRenamed("sum(amount)", "total_amount") // 重命名聚合结果列 groupByWithSum.show()
对应输出
+-------+--------+------+------------+ | city| media|action|total_amount| +-------+--------+------+------------+ | Warsaw|facebook| share| 100| | Warsaw|facebook| like| 200| | Boston| twitter| share| 50| | Boston|facebook| share| 150| |Toronto| twitter| like| 50| +-------+--------+------+------------+
方案2:将media和action合并为一个组合字段后分组
如果你希望把“类型+子类型”作为一个单独的分组维度(比如生成facebook_share这样的组合标识),可以先通过concat函数创建一个新列,再基于这个新列分组。
代码示例
import org.apache.spark.sql.functions.concat_ws // 先创建media和action的组合列,再分组 val groupedWithCombinedType = sales .withColumn("media_action", concat_ws("_", $"media", $"action")) // 用下划线连接两个字段 .groupBy("city", "media_action") .sum("amount") .withColumnRenamed("sum(amount)", "total_amount") groupedWithCombinedType.show()
输出示例
+-------+-------------+------------+ | city|media_action |total_amount| +-------+-------------+------------+ | Warsaw|facebook_share| 100| | Warsaw|facebook_like | 200| | Boston|twitter_share | 50| | Boston|facebook_share| 150| |Toronto|twitter_like | 50| +-------+-------------+------------+
这两种方案都能满足你“结合类型与子类型分组”的需求,你可以根据实际的业务展示需求来选择~
内容的提问来源于stack exchange,提问作者ds_user
相关产品推荐
相关产品推荐

