Spark 数据帧按键将列值聚合到列表中



我有一个看起来像这样的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

可以使用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 Griffin 所示,您可以使用 Scala/Java DataFrame API 中的 collect_list 函数。

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

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

相关内容

  • 没有找到相关文章

最新更新