PySpark GroupBy聚合:如何将多列合并为指定格式字符串
解决方案
你需要调整聚合逻辑,先将每行的food和price用空格拼接成单个字符串,再收集这些字符串并最终用逗号分隔拼接成目标格式。
实现代码
from pyspark.sql.functions import concat_ws, collect_list # 先拼接每行的food和price,再聚合后拼接成目标字符串 df.groupBy('name').agg( concat_ws(', ', collect_list(concat_ws(' ', 'food', 'price'))).alias('sample') ).show(10, False)
输出结果
+----+------------------------------------------+ |name|sample | +----+------------------------------------------+ |john|tomato 1.99, carrot 0.45, banana 1.29 | |bill|apple 0.99, taco 2.59 | +----+------------------------------------------+
逻辑说明
concat_ws(' ', 'food', 'price'):将每行的食物名称和价格用空格拼接,生成类似tomato 1.99的单个字符串collect_list(...):按name分组后,收集每个分组内的所有拼接字符串,形成列表- 外层的
concat_ws(', ', ...):将列表中的所有字符串用,分隔,拼接成最终的目标格式字符串
内容的提问来源于stack exchange,提问作者Sharma
相关产品推荐
相关产品推荐

