Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
617 views
in Technique[技术] by (71.8m points)

Spark 2.x scala 2.1.1 custom encoder class type mismatch

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]
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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 
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...