You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala 2.13迁移时重载方法w报错:参数类型不匹配问题咨询

Scala 2.13迁移后mapValues引发的方法匹配错误

问题代码

def w(value : java.util.Map[String, java.util.List[String]]) : ParamPair[Map[String, (String, String)]] = {
    val scalaMap = value.asScala.toMap

    val newMap = scalaMap.mapValues[(String, String)]( (l : java.util.List[String]) => {
      if(l.size() != 2)
        throw new IllegalArgumentException("A tuple map should contain exactly 2 elements ")
      val lScala = l.asScala.toArray
      (lScala(0), lScala(1))
    })

    w(newMap)
}

报错信息

error: overloaded method w with alternatives:
[ERROR]   (value: java.util.Map[String,java.util.List[String]])org.apache.spark.ml.param.ParamPair[Map[String,(String, String)]] <and>
[ERROR]   (value: Map[String,(String, String)])org.apache.spark.ml.param.ParamPair[Map[String,(String, String)]]
[ERROR]  cannot be applied to (scala.collection.MapView[String,(String, String)])
[ERROR]     w(newMap)
[ERROR]     ^

问题原因

Scala 2.13对mapValues方法的返回类型做了颠覆性修改:

  • 在Scala 2.12及更早版本中,mapValues直接返回Map类型,属于完整的Map实现。
  • 但在Scala 2.13里,mapValues返回的是**scala.collection.MapView**——这是一种懒加载的视图结构,不会立即执行所有映射转换,只有在访问元素时才计算结果。

你的重载方法w仅支持两种参数类型:java.util.Map[...]和Map[String, (String, String)],而MapView与Map是完全不同的类型,编译器无法找到匹配的重载方法,因此抛出上述错误。

内容的提问来源于stack exchange,提问作者Alexandros Mouzakidis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 21:29:59