【问题标题】:Concatenating string by rows in pyspark在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 中创建这个数据框吗?

提前致谢。

【问题讨论】:

    标签: python apache-spark 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 时,它会按字符转换字符串。
    猜你喜欢
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 2016-04-21
    • 2020-04-26
    • 2021-10-29
    相关资源
    最近更新 更多