2016-06-27 5 views
2

sparkプログラムでいくつかの特性とクラスを定義しましたが、jarにパッケージ化するとうまく動作しますが、spark replで実行すると失敗します。spark repl "内部クラスの型不一致"

trait Builder { 
    trait Layer { 
    def layerSize: Int 
    } 

    abstract class Layer1 extends Layer 

    class Layer2(val layerName: String) extends Layer { 
    override def layerSize: Int = 10 
    def addInput(from: Layer): String = { 
     "" 
    } 
    } 

    object Layer2 { 
    def apply(name: String): Layer2 = { 
     new Layer2(name) 
    } 
    } 

    val FEATURES: Layer = new Layer1 { 
    override val layerSize = 10 
    } 
} 

class aBuilder extends Builder 

、私はコードを実行しますと

val builder = new aBuilder 
    val test = builder.Layer2("") 
    test.addInput(builder.FEATURES) 

そのエラー:

<console>:32: error: type mismatch; 
found : builder.Layer 
required: builder.Layer 
       test.addInput(builder.FEATURES) 
+0

@YuvalItzchakov Spark REPLまたは標準のScala/sbtでは、 – zero323

+1

@ zero323うわー、私は彼が言ったと思った* Scala REPL *。それを取り戻す。 Scala REPL/SBTで動作します。 –

+1

@ zero323 Hmm ..でもSpark REPLで動作するようです。 –

答えて

0

[OK]を次のように火花1.6.0および公式バイナリ(スカラ座2.10)で動作するようですが

scala> trait Builder { 
    | trait Layer { 
    |  def layerSize: Int 
    | } 
    | 
    | abstract class Layer1 extends Layer 
    | 
    | class Layer2(val layerName: String) extends Layer { 
    |  override def layerSize: Int = 10 
    |  def addInput(from: Layer): String = { 
    |  "" 
    |  } 
    | } 
    | 
    | object Layer2 { 
    |  def apply(name: String): Layer2 = { 
    |  new Layer2(name) 
    |  } 
    | } 
    | 
    | val FEATURES: Layer = new Layer1 { 
    |  override val layerSize = 10 
    | } 
    | } 
// defined trait Builder 

scala> class aBuilder extends Builder 
// defined class aBuilder 

scala> :paste 
// Entering paste mode (ctrl-D to finish) 
val builder = new aBuilder 
val test = builder.Layer2("") 
test.addInput(builder.FEATURES) 
// Exiting paste mode, now interpreting. 
// builder: aBuilder = [email protected] 
// test: builder.Layer2 = [email protected] 
// res0: String = "" 

ただし、次の問題の変形です:SPARK-5149