2016-08-02 27 views
2

我有兩個JavaPairRDD。如何使用自定義邏輯來組合兩個JavaPairRDD

JavaPairRDD<List<String>, CustomObject> originalData = ...; 
JavaPairRDD<String, CustomField> newData = ...; 

在這種情況下,CustomField是CustomObject中的字段。我的目標是結合兩個數據集,條件是來自newData的密鑰位於來自originalData的密鑰中。所以,如果我有像

originalData =({ 「foo1」, 「foo2的」, 「foo3」},customObject1)

newData =( 「foo1」,自定義字段)

我想以匹配這兩個項目,並將customField1插入到customObject1中。我研究了Cogroup和FullOuterJoin,但是這些函數與key匹配,在這種情況下不起作用,因爲密鑰明顯不同。結合這兩個數據集的最佳方式是什麼?

回答

1

你需要原始的形狀?如果不使用直角座標:

originalData.cartesian(newData).filter(checkConditon); 

你也可以把它平:

JavaPairRDD<String, CustomObject> flatData = originalData.flatMap(flatteningFunc); 
flatData.join(newData); 
+0

我認爲第二個選項是快了很多 –