loo*_*ass 1 python apache-spark pyspark
在 pandas 数据框中,我能够做到
df2 = df.groupBy('name').agg({'id': 'first', 'grocery': ','.join})
Run Code Online (Sandbox Code Playgroud)
从
name id grocery
Mike 01 Apple
Mike 01 Orange
Kate 99 Beef
Kate 99 Wine
Run Code Online (Sandbox Code Playgroud)
到
name id grocery
Mike 01 Apple,Orange
Kate 99 Beef,Wine
Run Code Online (Sandbox Code Playgroud)
由于同一个人的多行 id 是相同的,所以我只为每个人取第一个,然后连接杂货店。
我似乎无法在 pyspark 中完成这项工作。我怎样才能在 pyspark 中做同样的事情?我希望杂货店是字符串而不是列表
用于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|
#+----+---+------------+
Run Code Online (Sandbox Code Playgroud)