2017-10-23 5 views
0

私はScalaの2.1.1で、スパーク2.xのためのエンコーダを定義するには、このコードを使用しています:スパーク2.xのScalaの2.1.1カスタムエンコーダクラス型の不一致

import org.apache.spark.sql.Encoder 
import org.apache.spark.sql.types.StructType 

class LogProcessorMessageEncoder extends Encoder[LogProcessorMessage] { 
    override def schema: StructType = null 

    override def clsTag: Class[LogProcessorMessage] = classOf[LogProcessorMessage] 
} 

object LogProcessorMessage {} 

class LogProcessorMessage extends Serializable {} 

そしてIntelliJのは、それは結構ですと言いますしかし、コンパイラエラーにclsTag法結果のオーバーライド:

Error:(20, 15) overriding method clsTag in trait Encoder of type => scala.reflect.ClassTag[dvn.aast.telemetry.scala.stream.LogProcessorMessage]; 
method clsTag has incompatible type 
override def clsTag: Class[LogProcessorMessage] = classOf[LogProcessorMessage] 

答えて

1

clsTagClassTagないClassなければならない:

class LogProcessorMessageEncoder extends Encoder[LogProcessorMessage] { 
    override def clsTag: ClassTag[LogProcessorMessage] = ClassTag(classOf[LogProcessorMessage]) 
    override def schema: StructType = null 
} 
+0

これは単に 'classTag [LogProcessorMessage]'と書くことができます( 'ClassTag'と一緒に' ClassTag'をインポートするだけです)。 –

+0

ありがとうございました!元のdefはIntelliJによって生成されました - 私はより密接に戻り値の型を調べるべきでした。本当にありがとう。 – absmiths