【发布时间】:2019-10-04 17:20:13
【问题描述】:
我有一个包含 3 列的 PySpark 数据框架。有些行在 2 列中相似,但在第三列中不相似,请参见下面的示例。
----------------------------------------
first_name | last_name | requests_ID |
----------------------------------------
Joe | Smith |[2,3] |
----------------------------------------
Joe | Smith |[2,3,5,6] |
----------------------------------------
Jim | Bush |[9,7] |
----------------------------------------
Jim | Bush |[21] |
----------------------------------------
Sarah | Wood |[2,3] |
----------------------------------------
我想根据 {first_name, last_name} 列对行进行分组,并且只有 {requests_ID} 数量最多的行。所以结果应该是:
----------------------------------------
first_name | last_name | requests_ID |
----------------------------------------
Joe | Smith |[2,3,5,6] |
----------------------------------------
Jim | Bush |[9,7] |
----------------------------------------
Sarah | Wood |[2,3] |
----------------------------------------
我尝试了以下不同的方法,但它为我提供了 group-by 中两行的嵌套数组,而不是最长的。
gr_df = filtered_df.groupBy("first_name", "last_name").agg(F.collect_set("requests_ID").alias("requests_ID"))
这是我得到的结果:
----------------------------------------
first_name | last_name | requests_ID |
----------------------------------------
Joe | Smith |[[9,7],[2,3,5,6]]|
----------------------------------------
Jim | Bush |[[9,7],[21]] |
----------------------------------------
Sarah | Wood |[2,3] |
----------------------------------------
【问题讨论】: