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/JavaDataFrame
API中的collect\u list
函数
但是,也可以使用相同的函数,但使用Spark SQL API:
spark.sql("SELECT id, collect_list(value) FROM df GROUP BY id")
谢谢大卫,太棒了!你导入什么(在独立应用程序中)