2017-03-06 111 views
0

我是Pyspark的新手,我使用的是Spark 2.0.2。Pyspark单RDD到RDD的多重RDD密钥

我已经RDD叫Test_RDD具有以下结构:

U-Key || V1 || V2 || V3 || 
----------------------------------- 

1001_01 || 12 || 41 || 21 || 

1001_01 || 36 || 43 || 63 || 

1001_01 || 60 || 45 || 10 || 

1002_03 || 84 || 57 || 14 || 

1002_03 || 18 || 49 || 18 || 

1004_01 || 12 || 41 || 22 || 

1004_01 || 16 || 43 || 26 || 

我需要从U型键柱使用独特的价值观创造新的RDD,例如

RDD_1001_01为:

U-Key || V1 || V2 || V3 || 
----------------------------------- 
1001_01 || 12 || 41 || 21 || 

1001_01 || 36 || 43 || 63 || 

1001_01 || 60 || 45 || 10 || 

RDD_1002_03 as:

U-Key || V1 || V2 || V3 || 
----------------------------------- 

1002_03 || 84 || 57 || 14 || 

1002_03 || 18 || 49 || 18 || 

RDD_1004_01为:

U-Key || V1 || V2 || V3 || 
----------------------------------- 

1004_01 || 12 || 41 || 22 || 

1004_01 || 16 || 43 || 26 || 

从1 RDD(Test_RDD)至3 RDD的(RDD_1001_01,RDD_1002_03,RDD_1004_01) 新RDD的名称应该是这样RDD_(从Test_RDD唯一列名称)。 Pyspark中是否有可用于此场景的功能?

回答

1

正如@ user6910411所提到的那样,通过一次函数调用就无法做到这一点。

尽管你的答案,后实际上没有提供关于您的问题洞察力显著量:回答的第一句已经指出

这是不可能从单一转化产生多个RDDS *。如果你想拆分一个RDD,你必须为每个拆分条件应用一个过滤器。

除此之外,理论上你可以通过分割每个单独的索引来做到这一点 - 而不是你想要做的一个可能的大型RDD。 取而代之的是,一个简单的groupByKey可以实现类似于您的请求的诀窍,但在相同的RDD中。根据您的进一步处理,应该提及您should avoid groupByKey for reduce operations,由于其洗牌操作过多。