通过子字符串值过滤RDD

时间:2016-08-22 09:17:39

标签: scala

我想基于分析子字符串中的值来过滤掉RDD[(String,List[(String,String,String,String)]中的一些条目:

这是我的样本数据:

(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 个答案:

答案 0 :(得分:1)

通过检查list of tuples没有4条目"null"条目的元组来过滤您的RDD

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