python - Groupby 并将不同的值聚合为字符串

标签 python string apache-spark pyspark group-by

我有如下表格:

ID   start date     name        type
 1   2020/01/01   cheese,meat    A, B
 1   2020/01/01   cheese,fruit   A, C

所需的输出应该是:

ID    start date    count                 type 
1     2020/01/01   cheese,meat,fruit      A,B,C

我尝试使用 collect_listcollect_set,但两者都不起作用。

最佳答案

您可以拆分和分解列,然后分组并收集集合:

import pyspark.sql.functions as F

df2 = df.withColumn(
    'name',
    F.explode(F.split('name', ','))
).withColumn(
    'type',
    F.explode(F.split('type', ','))
).groupBy(
    'ID', 'start date'
).agg(
    F.concat_ws(',', F.collect_set('name')).alias('name'),
    F.concat_ws(',', F.collect_set('type')).alias('type')
)

df2.show()
+---+----------+-----------------+-----+
| ID|start date|             name| type|
+---+----------+-----------------+-----+
|  1|2020/01/01|fruit,meat,cheese|C,B,A|
+---+----------+-----------------+-----+

关于python - Groupby 并将不同的值聚合为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66362678/

相关文章:

hadoop - 为什么 Spark 将分区设置为以字节为单位的文件大小?

regex - 使用 Scala 中的 Spark 使用 Regex 过滤 DataFrame

python - 加权平均 Pandas

python - 有时只读属性

Java:找到大写字母时拆分字符串

Java:执行连接变量和文字的 StringBuilder.indexOf() 的开销

hadoop - 在 Kerberized 集群中读取 Spark 应用程序中的 HDFS 文件

python - 在 windows 上安装 tensorflow

python - 字符串中倒数第二次出现的整数 (Python)

Python 字符串中不一致的特殊字符存储