pyspark 使用 agg 在 groupBy 之后连接字符串

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 中做同样的事情?我希望杂货店是字符串而不是列表

Psi*_*dom 9

用于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)