Scala 2.13迁移报错:map方法类型参数数量不符
Scala 2.12迁移至2.13:Array.map方法类型参数报错问题解析
错误原因
Scala 2.13对集合库做了大幅重构,其中Array的map方法签名发生了关键变化:
- 在Scala 2.12中,
Array的map基于CanBuildFrom机制,允许传入两个类型参数(目标元素类型B和最终集合类型That); - 但Scala 2.13移除了
CanBuildFrom,Array.map的签名简化为仅接受一个类型参数B,返回类型固定为Array[B](通过隐式ClassTag[B]自动生成数组实例)。
你代码中给map传入了[StructField, Array[StructField]]两个类型参数,完全不符合Scala 2.13中map方法的签名要求,因此触发参数数量错误。
修复方案
只需要保留目标元素类型的参数(或直接让编译器自动推导,因为lambda的返回值已经明确是StructField),两种写法都可行:
写法1:显式指定元素类型
override def transformSchema(schema: StructType): StructType = { StructType(schema.fields ++ this.getOutputCols.map[StructField](col => StructField(col, StringType))) }
写法2:让编译器自动推导类型
override def transformSchema(schema: StructType): StructType = { StructType(schema.fields ++ this.getOutputCols.map(col => StructField(col, StringType))) }
内容的提问来源于stack exchange,提问作者Alexandros Mouzakidis
相关产品推荐
相关产品推荐

