如果我在 spark-shell (scala-shell) 中定义 case class,则构造函数签名会更改

Constructor signature is changed if I define case class in spark-shell (scala-shell)

我在spark-shell或scala-shell中定义了case class,发现它的构造函数签名变了,多了一个参数$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)

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

详情请参考