我是scala的新手,我将一些代码从scala 2.12迁移到13。
override def transformSchema(schema: StructType): StructType = {
StructType(schema.fields ++ this.getOutputCols.map[StructField, Array[StructField]]( col => StructField(col, StringType)))
}
字符串
出现以下错误:
wrong number of type parameters for method map: [B](f: String => B)(implicit ct: scala.reflect.ClassTag[B]): Array[B]
[ERROR] StructType(schema.fields ++ this.getOutputCols.map[StructField, Array[StructField]]( col => StructField(col, StringType)))
型
你能解释一下为什么scala 2.13会有这个问题吗?我没有找到与文档相关的东西。map方法试图转换数组,应该没问题。
2条答案
按热度按时间e3bfsja21#
2.13是对集合的重写-参见https://docs.scala-lang.org/overviews/core/collections-migration-213.html。
在你的例子中,问题就像error说的那样:
.map
中取了2个类型参数
.map
中接受1个类型参数
所以2.13应该是
型
w51jfk4q2#
对于Scala 2.12,添加到
Array
的map
方法(通过隐式转换为WrappedArray
)有两个类型参数,其中第二个用于选择CanBuildFrom
示例以约束结果集合类型。Scala 2.13重写了集合API(包括
Array
增强)不使用CanBuildFrom
机制,因此使用map
方法(现在通过ArraySeq
添加)现在只接受一个类型参数,结果ArraySeq
的元素类型。因此,您不需要Array[StructField]
类型参数(几乎可以肯定,实际上也不需要StructField
类型参数)。字符串