Spark agg为多个列收集单个列表

时间:2018-09-19 16:12:10

标签: scala apache-spark group-by apache-spark-sql

这是我当前的代码:

pipe_exec_df_final_grouped = pipe_exec_df_final.groupBy("application_id").agg(collect_list("table_name").alias("tables"))

但是,在我的收集列表中,我想要多个列值,因此聚合列将是一个数组数组。当前结果如下:

1|[a,b,c,d]
2|[e,f,g,h]

但是,我还想保留另一列附加到该聚集(让我们将其称为“状态”列名称)。所以我的新输出将是:

1|[[a,pass],[b,fail],[c,fail],[d,pass]]
...

我尝试了collect_list("table_name, status"),但是collect_list仅使用一个列名。我该如何完成我想做的事情?

1 个答案:

答案 0 :(得分:5)

首先使用array将列收集到数组列中,然后应用collect_list

df.groupBy(...).agg(collect_list(array("table_name", "status")))