Scala 创建编码器后,Spark中的TestRing无法解析Protobuf

Scala 创建编码器后,Spark中的TestRing无法解析Protobuf,scala,apache-spark,protocol-buffers,scalapb,apache-spark-encoders,Scala,Apache Spark,Protocol Buffers,Scalapb,Apache Spark Encoders,我正试图解析spark 2.4中的protobuf(protobuf3)数据,但ByteString类型有一些问题。我使用ScalaPB库创建了case类,并将jar加载到spark shell中。我还尝试为该类型创建隐式编码器,但仍然出现以下错误: java.lang.UnsupportedOperationException:未找到com.google.protobuf.ByteString的编码器 以下是我迄今为止所做的尝试 import proto.Event._ // my proto

我正试图解析spark 2.4中的protobuf(protobuf3)数据,但ByteString类型有一些问题。我使用ScalaPB库创建了case类,并将jar加载到spark shell中。我还尝试为该类型创建隐式编码器,但仍然出现以下错误:

java.lang.UnsupportedOperationException:未找到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(_))

导入proto.Event.\u//我的proto-case类
导入org.apache.spark.sql.Encoder
导入org.apache.spark.sql.Encoders.kryo
//注册我们的UDT以避免“不是术语”错误:
EventProtoUdt.register()
val inputFile=“data.avro”
对象ByteStringEncoder{
隐式def byteStringEncoder:Encoder[com.google.protobuf.ByteString]=org.apache.spark.sql.Encoders.kryo[com.google.protobuf.ByteString]
}
导入ByteStringEncoder_
导入spark.implicits_
def parseLine(s:String):Event=Event.parseFrom(org.apache.commons.codec.binary.Base64.decodeBase64)
导入scalapb.spark_
val eventsDf=spark.read.format(“avro”).load(输入文件)
val eventsDf2=eventsDf.map(row=>row.getAs[Array[Byte]](“Body”)).map(Event.parseFrom()

非常感谢您的帮助

此问题已在sparksql scalapb 0.9.0中修复。请参阅关于设置导入的说明,以便通过隐式搜索获取ByteString的
编码器。

我计划将ByteString编码器添加到sparksql scalapb:-将在这里添加一个可用的答案。