Spark结构化流式Protobuf ScalaPB'java.lang.NoSuchMethodError“

时间:2019-11-27 07:28:08

标签: scala apache-spark protocol-buffers

我是刚开始使用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。是这样吗?其他人怎么做到的?

0 个答案:

没有答案