Apache spark 将数据帧按键聚合列值放入列表

Apache spark 将数据帧按键聚合列值放入列表,apache-spark,dataframe,apache-spark-sql,Apache Spark,Dataframe,Apache Spark Sql,我有一个数据帧,看起来像这样: +-----------------+-------+ |Id | value | +-----------------+-------+ | 1622| 139685| | 1622| 182118| | 1622| 127955| | 3837|3224815| | 1622| 727761| |

我有一个
数据帧
,看起来像这样:

+-----------------+-------+
|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")
如果您想要一个由
分隔的
字符串,而不是
数组,请尝试以下操作:

df.groupBy(col("Id"))
  .agg(collect_list(col("value")) as "value")
  .withColumn("value", concat_ws(",", col("value")))
如所示,您可以使用Scala/Java
DataFrame
API中的
collect\u list
函数

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

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

谢谢大卫,太棒了!你导入什么(在独立应用程序中)