Spark SQL按ID汇总数量并合并位置的实现需求
解决方案:Spark SQL与PySpark实现分组求和+字符串合并
Spark SQL 实现
假设你的数据表名为your_table,先注册临时视图(若未注册):
CREATE OR REPLACE TEMP VIEW temp_data AS SELECT * FROM your_table;
执行分组查询,实现求和与字符串合并:
SELECT ID, SUM(Quantity) AS Quantity, CONCAT_WS(',', COLLECT_LIST(Location)) AS Location FROM temp_data GROUP BY ID ORDER BY ID;
如果同一个ID下存在重复的Location值,需要去重的话,将COLLECT_LIST替换为COLLECT_SET即可。
PySpark 实现
假设你的数据存储在DataFramedf中,使用PySpark API实现:
from pyspark.sql import functions as F # 分组聚合 result_df = df.groupBy("ID") \ .agg( F.sum("Quantity").alias("Quantity"), F.concat_ws(",", F.collect_list("Location")).alias("Location") ) \ .orderBy("ID") # 查看结果 result_df.show()
同样,若需对Location去重,用F.collect_set("Location")替换F.collect_list("Location")。
内容的提问来源于stack exchange,提问作者Maximus
相关产品推荐
相关产品推荐

