2016-08-22 47 views
0

我想基於在子分析值從RDD[(String,List[(String,String,String,String)]過濾掉一些條目:過濾RDD由子串值

這是我SAMPE數據:

(600,List((600,111,1,1), (615,111,1,5))) 
(600,List((638,111,2,null), (649,222,3,1))) 
(600,List((638,111,2,3), (649,null,3,1))) 

我特別要檢查的第4場在每個子字符串中(如果從1開始計數)。如果它等於null,那麼整個條目應該被刪除。結果應該如下:

(600,List((600,111,1,1), (615,111,1,5))) 
(600,List((638,111,2,3), (649,null,3,1))) 

因此,在這個特殊的例子中,第二個條目應該被刪除。

這是我試圖解決這個任務:

val filtered = separated.map(l => (l._1,l._2.filter(!_._4.equals("null")))) 

的問題是,它只是刪除子,而不是整個項目。結果如下(而不是上面提到的一個):

(600,List((600,111,1,1), (615,111,1,5))) 
(600,List((649,222,3,1))) 
(600,List((638,111,2,3), (649,null,3,1))) 

回答

1

通過檢查list of tuples沒有與4個條目的元組過濾您的RDD "null"

yourRdd.filter({ 
    case (id, list) => !list.exists(t => t._4.equals("null")) 
})