我正在使用Java Spark,我有1个像这样的Dataframe
+---+-----+------+
|id |color|datas |
+----------------+
|1 |blue |data1|
|1 |red |data2|
|1 |orange|data3|
|2 |black |data4|
|2 | |data5|
|2 |yellow| |
|3 |white |data7|
|3 | |data8|
+----------------+
我需要修改此数据框,如下所示:
+---+--------------------+---------------------+
|id |color |datas |
+----------------------------------------------+
|1 |[blue, red, orange] |[data1, data2, data3]|
|2 |[black, yellow] |[data4, data5] |
|3 |[white] |[data7, data8] |
+----------------------------------------------+
我想合并数据以创建同一列的'数组',但是根据'id'列从不同的行创建。
我可以通过UserDefinedAggregateFunction完成,但我一次只能做一列,而且处理时间太长。
谢谢
编辑:我正在使用Spark 1.6
答案 0 :(得分:2)
你可以按" id"分组然后使用collect_list
函数获取聚合值。
dataframe.groupBy("id").agg(collect_list(struct("color")).as("color"), collect_list(struct("dates")).as("dates") )
希望这有帮助
答案 1 :(得分:0)
对我有用的实际功能是:
dataframe.groupBy(“ id”)。agg(collect_list(“ color”)。as(“ color”), collect_list(“ date”)。as(“ date”)) dataframe.createOrReplaceTempView(“ dataframe”)
然后创建一个新查询,您可以在其中使用struct()
dffinal = spark.sql(s“”“ SELECT struct(a.color)AS颜色, struct(a.date)来自数据框““”“的AS日期