Spark DataFrame按键聚合列值为列表

13

我有一个看起来像这样的DataFrame

+-----------------+-------+
|Id               | value |
+-----------------+-------+
|             1622| 139685|
|             1622| 182118|
|             1622| 127955|
|             3837|3224815|
|             1622| 727761|
|             1622| 155875|
|             3837|1504923|
|             1622| 139684|
+-----------------+-------+

我希望你可以将其翻译成:

    +-----------------+-------------------------------------------+
    |Id               | value                                     |
    +-----------------+-------------------------------------------+
    |             1622|139685,182118,127955,727761,155875,139684  |
    |             3837|3224815,1504923                            |
    +-----------------+-------------------------------------------+

使用DataFrame函数是否足够,还是需要将其转换为RDD

2个回答

13

使用 DataFrame API 可以实现。尝试如下:

df.groupBy(col("Id"))
  .agg(collect_list(col("value")) as "value")

如果您需要一个由,分隔的String,而不是一个Array,那么可以尝试这样做:

df.groupBy(col("Id"))
  .agg(collect_list(col("value")) as "value")
  .withColumn("value", concat_ws(",", col("value")))

谢谢David,太棒了! - C.A
你在独立应用中导入了什么? - Haha TTpro

0

正如David Griffin上面所展示的,您可以使用Scala/Java DataFrame API中的collect_list函数。

但是,也可以使用相同的函数,但使用Spark SQL API:

spark.sql("SELECT id, collect_list(value) FROM df GROUP BY id")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接