这是我的RDD(RDD[(String, Map[String,List[Product wuth Serializable]])]
)的两个示例条目:
(600,Map(current_data -> List((600,111,1,1), (615,111,1,5)), additional_data -> List((3,120,1,1,3370,f,0,268.78)))
(601,Map(current_data -> List((600,111,1,1), (615,111,1,5)), additional_data -> List((3,110,1,0,3370,f,0,268.78)))
我想过滤掉" additional_data"访问的子列表中的条目。在第3个字段中包含0。
例如,在上面的示例中,列表List((3,110,1,0,3370,f,0,268.78))
在第3个字段中包含0
。因此,应删除整个条目,结果为:
(600,Map(current_data -> List((600,111,1,1), (615,111,1,5)), additional_data -> List((3,120,1,1,3370,f,0,268.78)))
这是我当前的代码,由于错误Type mismatch, expected ((String,List[Product with Serializable])) => Boolean, actual ((String,List[Product with Serializable])) => Any
而无法编译。
val result = myRDD.filter({
case (id, list) => !list.exists({
t => (t.get("additional_data").map(_._3) == 0)
})
})
更新:
我的最后一次尝试就是愚弄。它可以编译,但由于某种原因不能解决任务。我检查l.productElement(3)
对于某些条目确实等于0
,但这些条目不会被删除......:
val result = myRDD.filter{
case (id, hmap) => !hmap.get("member_data").exists({
t => (t.exists({ l => l.productElement(3).equals(0)}))
})
}
答案 0 :(得分:0)
我相信你应该以这种方式改变你的代码
val result = myRDD.filter{
case (id, map) => !map.get("additional_data").map(_._3).exists(_==0)
}