类型不匹配,预期((String,List [Product with Serializable]))> Boolean,actual((String,List [Product with Serializable]))=>任何

时间:2016-08-23 12:16:04

标签: scala apache-spark

这是我的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)}))
  }) 
}

1 个答案:

答案 0 :(得分:0)

我相信你应该以这种方式改变你的代码

val result = myRDD.filter{
    case (id, map) => !map.get("additional_data").map(_._3).exists(_==0)
}