在pyspark中按行连接字符串

Posted

技术标签:

【中文标题】在pyspark中按行连接字符串【英文标题】:Concatenating string by rows in pyspark 【发布时间】:2017-01-22 08:38:23 【问题描述】:

我有一个 pyspark 数据框作为

DOCTOR | PATIENT
JOHN   | SAM
JOHN   | PETER
JOHN   | ROBIN
BEN    | ROSE
BEN    | GRAY

并且需要按行连接患者姓名,以便获得如下输出:

DOCTOR | PATIENT
JOHN   | SAM, PETER, ROBIN
BEN    | ROSE, GRAY

有人可以帮我在 pyspark 中创建这个数据框吗?

提前致谢。

【问题讨论】:

【参考方案1】:

我能想到的最简单的方法是使用collect_list

import pyspark.sql.functions as f
df.groupby("col1").agg(f.concat_ws(", ", f.collect_list(df.col2)))

【讨论】:

感谢阿萨夫!这会替换现有列还是创建新列?我的意图是创建一个新专栏。 这将创建一个只有两列 col1 和 col2 聚合的数据框,因为这是一个聚合函数。 嗨@Assaf,感谢您的澄清。虽然我将 df.col2 放在上述语句中,但它在连接时并没有保留 col2 的顺序。例如如果我采用与问题相同的示例,并且需要 JOHN | 的结果彼得、罗宾、萨姆本 |灰色,玫瑰我,即。按字母排序,我应该对语句进行哪些更改?提前致谢! 如果你需要在一个键中排序,我要做的就是只做 collect_list 部分,不连接,然后做一个 UDF 获取列表,对其进行排序并创建字符串。虽然它会更慢并且涉及不止一条线 这样做的问题是,当您在单个字符串上调用collect_list 时,它会按字符转换字符串。

以上是关于在pyspark中按行连接字符串的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark:排序/排序,然后分组和连接字符串

使用 sed 提取文本文件以删除另一个文件中按行给出的后缀

Pyspark:使用转换类型作为字符串的多重连接条件

c语言中从文件中按行读取字符串,并进行相应操作。

在 2 个表中按所有字段搜索左连接 - 性能问题?

pyspark - 左连接,随机行匹配键