2015-07-06 34 views
0

我有一個JavaPaidRDD,我試圖迭代並返回基於某些條件的元素,而不是JavaPaidRDD中的所有記錄。迭代JavaPairRDD - 根據一些條件返回

請參閱下面的代碼,我試圖實現。

我不想返回,如果可選有任何元素存在[if(_22.isPresent())]。但我不能在那裏使用continue

有沒有其他我們可以做到的,我們可以用reduceBy來實現嗎?

JavaPairRDD<String, Tuple2<Model, Optional<Model>>> leftOuterJoin = cfRDD.leftOuterJoin(mfRDD); 
JavaRDD<Model> map = leftOuterJoin.map(tuple -> { 
    Tuple2<Model, Optional<Model>> _2 = tuple._2(); 
     Model _1 = _2._1(); 
     Optional<Model> _22 = _2._2(); 
     if(_22.isPresent()) { 
      //do not return anything 
      //continue; 
     } 
     return _1; 
    }); 

回答

1

好像你正在尋找的是一個flatMap,在這種情況下,你會的功能,而不是試圖用繼續返回一個空列表,如果你想返回值的內部只返回迭代器裏面有這個值。然後,Spark將產生一個RDD值,並且您的條件不成立的所有值不會成爲結果的一部分。另一種選擇是將filter映射到它之前的輸入,因此只有通過您的條件的元素需要映射。

+0

Thanks @Holden能否請你給一些'filter'的代碼示例考慮上面的場景.. – Shankar

+0

Thanks @Holden,我明白了..我用過濾器來使它工作。 – Shankar