Spark 2.x scala 2.1.1 custom encoder class type mismatch

China☆狼群 提交于 2019-12-14 04:06:41

问题


I am using this code to define an encoder for spark 2.x, in 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 {}

And IntelliJ says it is fine, but the override of the clsTag method results in a compiler error:

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 has to be ClassTag not Class:

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


来源:https://stackoverflow.com/questions/46894899/spark-2-x-scala-2-1-1-custom-encoder-class-type-mismatch

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!