在熊猫数据框中,我能够做到
df2 = df.groupBy('name').agg({'id': 'first', 'grocery': ','.join})
来自
name id grocery
Mike 01 Apple
Mike 01 Orange
Kate 99 Beef
Kate 99 Wine
到
name id grocery
Mike 01 Apple,Orange
Kate 99 Beef,Wine
由于同一人的多行ID相同,所以我只是为每个人取了第一个,然后将杂货铺满了。
我似乎无法在pyspark中完成这项工作。我如何在pyspark中做同样的事情?我希望杂货店是字符串而不是列表
答案 0 :(得分:3)
使用collect_list
将元素收集到列表中,然后使用concat_ws
作为字符串将列表加入:
import pyspark.sql.functions as f
df.groupBy("name")
.agg(
f.first("id").alias("id"),
f.concat_ws(",", f.collect_list("grocery")).alias("grocery")
).show()
#+----+---+------------+
#|name| id| grocery|
#+----+---+------------+
#|Kate| 99| Beef,Wine|
#|Mike| 01|Apple,Orange|
#+----+---+------------+