我是刚开始使用Spark结构化流2.2.2解码protobuf消息。 我独立使用ScalaPB从我的.proto文件生成scala代码。现在,我想从Kafaka消息中进行解析。 这是我的代码。
import scalapb.spark.Implicits._
val pbDs = kafkaDs
.map(row => row.getAs[Array[Byte]]("value"))
.map(Person.parseFrom(_).entries.head)
和build.sbt。我将scalapb-runtime添加为依赖项,因为Person是由ScalaPB独立编译器生成的。(请参阅https://scalapb.github.io/scalapbc.html)
lazy val myDep = Seq(
"com.thesamet.scalapb" %% "sparksql-scalapb" % "0.9.0",
"com.thesamet.scalapb" %% "scalapb-runtime" % "0.9.0")
但是scalaPB给出了错误:
java.lang.NoSuchMethodError: org.apache.spark.sql.catalyst.expressions.objects.StaticInvoke$.apply$default$6()Z
at frameless.TypedEncoder$$anon$1.toCatalyst(TypedEncoder.scala:51)
at frameless.TypedExpressionEncoder$.apply(TypedExpressionEncoder.scala:29)
at scalapb.spark.Implicits$class.typedEncoderToEncoder(TypedEncoders.scala:125)
at scalapb.spark.Implicits$.typedEncoderToEncoder(TypedEncoders.scala:128)
我搜索了该错误,并说它是becos无框架的,并且符合Java6。是这样吗?其他人怎么做到的?