2016-08-22 57 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")) 
})