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

时间:2020-06-30 19:16:46

标签: python apache-spark pyspark

在熊猫数据框中,我能够做到

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

1 个答案:

答案 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|
#+----+---+------------+