Я пытаюсь проанализировать данные protobuf (protobuf3) в spark 2.4, и у меня возникли некоторые проблемы с типом ByteString. Я создал класс case, используя библиотеку ScalaPB, и загрузил jar в оболочку spark. Я также попытался создать неявный кодировщик для типа, однако я все еще получаю следующую ошибку:
java.lang.UnsupportedOperationException: No Encoder found for com.google.protobuf.ByteString
Вот то, что я пробовал до сих пор;
import proto.Event._ // my proto case class
import org.apache.spark.sql.Encoder
import org.apache.spark.sql.Encoders.kryo
// Register our UDTs to avoid "<none> is not a term" error:
EventProtoUdt.register()
val inputFile = "data.avro"
object ByteStringEncoder{
implicit def byteStringEncoder: Encoder[com.google.protobuf.ByteString] = org.apache.spark.sql.Encoders.kryo[com.google.protobuf.ByteString]
}
import ByteStringEncoder._
import spark.implicits._
def parseLine(s: String): Event= Event.parseFrom(org.apache.commons.codec.binary.Base64.decodeBase64(s))
import scalapb.spark._
val eventsDf = spark.read.format("avro").load(inputFile)
val eventsDf2 = eventsDf .map(row => row.getAs[Array[Byte]]("Body")).map(Event.parseFrom(_))
Любая помощь приветствуется