2017-10-23 3 views
0

ich diesen Code verwenden einen Encoder für die Funken 2.x zu definieren, in scala 2.1.1:Spark-2.x scala 2.1.1 benutzerdefinierte Encoderklasse Typenkonflikt

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 {} 

Und IntelliJ sagt, es ist in Ordnung , aber die Überschreibung der clsTag Verfahren führt zu einem Compiler-Fehler:

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] 

Antwort

1

clsTag hat ClassTag nicht Class sein:

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

Sie können dies nur als "classTag [LogProcessorMessage]" schreiben (importieren Sie einfach 'classTag' zusammen mit' ClassTag'). –

+0

Vielen Dank euch beiden! Das ursprüngliche def wurde von IntelliJ generiert - ich hätte mir den Rückgabetyp genauer ansehen sollen. Vielen Dank. – absmiths