Scala类型MisMatch spark中的错误

时间:2015-11-02 16:02:42

标签: scala

我创建了以下功能:

 def mapToPers(inTuple: (String, String, String), 
               v: ((Double, Double, Double, Double, Double),
                   Map[Double,
                       (Double, Double, Double, Double, Double)])) = {

      val (prod: String, market: String, week: String) = inTuple
      val result = for (cumePeriod <- cumePeriods) yield {
        val (per, weekList) = cumePeriod
        if (weekList.contains(week)) ((prod, market, per), v)        
  }
 result
}

当我调用它时,它会出现类型不匹配的错误:

  

描述资源路径位置类型不匹配;发现:   ((String,String,String),((Double,Double,Double,Double,Double),   地图[Double,(Double,Double,Double,Double,Double)]))=&gt;    scala.collection.immutable.Iterable [Any] required:(((String,String,String),((Double,Double,Double,Double,Double),   地图[Double,(Double,Double,Double,Double,Double)])))=&gt;   的 TraversableOnce [?]

1 个答案:

答案 0 :(得分:3)

你明显有嵌套元组的问题。检查括号:

发现:

(
  (String, String, String), 
  (
    (Double, Double, Double, Double, Double), 
    Map[Double,(Double, Double, Double, Double, Double)]
  )
) => scala.collection.immutable.Iterable[Any] 

要求:

(
  (
    (String, String, String), 
    (
      (Double, Double, Double, Double, Double), 
      Map[Double,(Double, Double, Double, Double, Double)]
    )
  )
) => TraversableOnce[?]

所以我看到了一个更高级别的嵌套。鉴于非常混乱的类型很难发现,我建议你在这里使用一些案例类。

编辑:BTW,我发现了别的东西。您正在使用的if没有其他内容,因此for comprehension将不知道要准确收益。您可能只想在检查后才能收益:

val result = for { 
  (per, week_list) <- cumePeriods
  if week_list.contains(week)
}
  yield ((prod, market, per), v)