Spark Shell/Scala REPL中没有参数构造函数
在spark shell(使用scala repl)中,似乎不可能生成具有默认构造函数(即无参数构造函数)的(case)类: 这使得Jackson无法将某些内容反序列化到此类中,因为没有一种简单的方法可以使用反射构造该类的实例Spark Shell/Scala REPL中没有参数构造函数,scala,apache-spark,read-eval-print-loop,Scala,Apache Spark,Read Eval Print Loop,在spark shell(使用scala repl)中,似乎不可能生成具有默认构造函数(即无参数构造函数)的(case)类: 这使得Jackson无法将某些内容反序列化到此类中,因为没有一种简单的方法可以使用反射构造该类的实例 是否可以在spark shell中使case类具有默认构造函数?复制此代码得到数组[java.lang.reflect.constructor[\u]]=Array(public Hello(),public Hello(int))。您使用哪个scala版本?使用scal
是否可以在spark shell中使case类具有默认构造函数?复制此代码得到数组[java.lang.reflect.constructor[\u]]=Array(public Hello(),public Hello(int))。您使用哪个scala版本?使用scala 2.11.6和scala REPL,结果与Odomontois相同。然而,对于Spark shell,我得到了与您@lyomi相同的结果。但是新的Hello()可以像预期的那样工作:res1:Hello=Hello(0),即使在Spark shell中,我也可以在scala shell中创建零参数构造函数,但在Spark shell中,在2.10和2.11中都没有运气
Hello()
应该可以工作,因为从语法上讲,shell位于类$iw
的一个实例中,该类似乎是由repl生成的,而Hello
是该类的一个内部类。您能包含两个列表吗?一个在Scala外壳中显示“好”行为,另一个在Spark外壳中显示“坏”行为?我发现newhello()
在这两种环境中都能工作,而Hello()
在这两种环境中都不能工作。(我想这也是奥多蒙托斯和比约恩发现的。)@DanielDarabos供您参考,您不能执行Hello()
,因为编译器没有向伴随对象添加相应的apply()
方法,这与REPL无关,只是您不知道它
scala> case class Hello(i: Int) {
| def this() = this(0)
| }
defined class Hello
scala> classOf[Hello].getName
res1: String = Hello
scala> classOf[Hello].getConstructors()
res2: Array[java.lang.reflect.Constructor[_]] = Array(public Hello($iw), public Hello($iw,int))