2017-10-23 18 views
0

나는 스칼라 2.1.1, 스파크 2.x를위한 인코더를 정의하려면이 코드를 사용하고 있습니다 :스파크 2.x는 스칼라 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

clsTag는이어야 ClassTag하지 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