在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中按行连接字符串的主要内容,如果未能解决你的问题,请参考以下文章