2017-03-06 107 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,由於其洗牌操作過多。