1

我在 spark-shell 或 scala-shell 中定义了 case 类,发现它的构造函数签名发生了变化,增加了一个额外的参数$iw,那是什么?为什么会这样?此问题导致我无法通过其构造函数在反射中创建新实例

scala> case class People(id:Int, name: String)
class People

scala> classOf[People].getDeclaredConstructors.head
val res0: java.lang.reflect.Constructor[_] = public People($iw,int,java.lang.String)
4

1 回答 1

3

这是 scala 2.12 之后 scala-shell 和 spark-shell 中的预期行为。如果您只是使用 spark-shell 进行快速实验,您可以尝试依赖于 scala 2.11 的 spark 2.4。对于 prod,您仍然可以通过在 case case 构造器上使用 reelection 来构建您的包。

更多详情,请参考

snakeyaml 和 spark 导致无法构造对象

Spark 向 Scala 类的构造函数添加隐藏参数

于 2022-02-08T18:47:19.437 回答