Spark DataFrame groupby和collect_list作为聚合应用,它是否遵守行的顺序?

时间:2018-11-14 09:48:51

标签: python apache-spark group-by

最初,我有一个Spark数据框,其中包含产品相似之处:

|----------|-------------|---------|
|product_1 | product_2   | sim     | 
 -----------------------------------
| id_1     |      id_4   |    0.70 |   
------------------------------------
| id_2     |     id_3    |    0.5  | 
------------------------------------
| id_2     |      id_5   |    0.75 |   
------------------------------------
|id_3      | id_6        | 0.4     | 
 -----------------------------------
| id_1     |      id_7   |    0.32 |   
------------------------------------
| id_4     |     id_3    |    0.5  | 
------------------------------------
| id_3     |      id_5   |    0.2  |   
------------------------------------

在仅将前5个相似的产品都保留后,我按product_1进行了分组,并使用collect_list()创建了一个列,其中每个列表中最相似的5个产品都在列表中。

groupbyID1 = filter_top_5.groupby('product_1').agg(collect_list('product_2').alias("top-similar"))

我不确定的是:使用collect_list是否可以确保分别翻译groupby之后的行的顺序?我的意思是最相似的产品 first ro w,会成为列表中的第一个元素,依此类推吗?还是它们在列表中可能没有顺序?

filter_top_5 是一个类似的Spark DataFrame(我使用windowfilter通过“相似度” <= 5来获得它)。

|----------|-------------|---------|---------|
|product_1 | product_2   | sim     | rank
 --------------------------------------------|
| id_1     |      id_4   |    0.70 |   1
---------------------------------------------|
| id_1     |     id_7    |    0.32 |   2
---------------------------------------------|
| id_2     |      id_5   |    0.75 |   1
---------------------------------------------|
|id_2      | id_3        | 0.5     |   2
 --------------------------------------------|
| id_3      | id_6        | 0.4     |  1
---------------------------------------------|
| id_3     |      id_5   |    0.2  |   2
---------------------------------------------|
| id_4     |     id_3    |    0.5  |    1

和预期输出:

|----------|--------------|
|product_1 | top-similar  |  
 --------------------------
| id_1     | [id_4,id_7]  |    
---------------------------
| id_2     | [id_5,id_3]  | 

可能的答案是在此collect_list by preserving order based on another variable中,而不是建议的其他答案。

0 个答案:

没有答案