【问题标题】:Combine multiple rows into a single row [duplicate]将多行合并为一行[重复]
【发布时间】:2019-09-25 08:26:57
【问题描述】:

我正在尝试通过 pyspark 构建 sql 来实现这一点。 目标是将多行组合成单行 例子: 我要转换这个

+-----+----+----+-----+
| col1|col2|col3| col4|
+-----+----+----+-----+
|x    |  y |  z |13::1|
|x    |  y |  z |10::2|
+-----+----+----+-----+

+-----+----+----+-----------+
| col1|col2|col3|       col4|
+-----+----+----+-----------+
|x    |  y |  z |13::1;10::2|
+-----+----+----+-----------+

【问题讨论】:

  • 使用GROUP_CONCAT()GROUP BY

标签: sql pyspark apache-spark-sql pyspark-sql


【解决方案1】:

你要找的是this answer的spark-sql版本,如下:

query = """
  select col1, 
         col2, 
         col3, 
         concat_ws(';', collect_list(col4)) as col4 
    from some_table 
group by col1, 
         col2, 
         col3
"""
spark.sql(query).show()
#+----+----+----+-----------+
#|col1|col2|col3|       col4|
#+----+----+----+-----------+
#|   x|   y|   z|13::1;10::2|
#+----+----+----+-----------+

但请注意,由于 spark 是分布式的,因此不能保证保持任何特定顺序,除非您明确指定顺序。

查看更多:

【讨论】:

    【解决方案2】:

    扩展@Barmar 在评论中提出的建议,您可以像这样运行 SQL 查询:

    SELECT col1, col2, col3, GROUP_CONCAT(col4)
    FROM your_table
    GROUP BY col1, col2, col3
    

    【讨论】:

    • 感谢您的回复 Ike,但我收到以下异常未定义函数:'GROUP_CONCAT'。该函数既不是注册的临时函数,也不是在数据库'default'中注册的永久函数
    • GROUP_CONCAT() 是一个 MySQL 函数。你用的是什么数据库?
    猜你喜欢
    • 1970-01-01
    • 2012-09-20
    • 2015-09-05
    • 2012-12-29
    • 1970-01-01
    相关资源
    最近更新 更多