1

我正在运行使用 ProtoSQL.udf 的数据块作业。数据框有一列已编码 protoValue。parse 方法用于创建一个新列,该列存储从 protoValue 中提取的 json。

scalaVersion = 2.12 scalapb.version = 0.11.8

使用以下依赖项

实施“com.thesamet.scalapb:sparksql32-scalapb0_11_2.12:1.0.0-M1”
实施“com.thesamet.scalapb:scalapb-json4s_2.12:0.11.0”
实施“com.thesamet.scalapb:scalapb-runtime_2。 12:0.11.8"

在 ProtoSQL.udf 运行时出现以下错误

java.lang.VerifyError:类 frameless.functions.Spark2_4_LambdaVariable 覆盖最终方法 genCode.(Lorg/apache/spark/sql/catalyst/expressions/codegen/CodegenContext;)Lorg/apache/spark/sql/catalyst/expressions/codegen/ExprCode ;

堆栈跟踪

OpenJDK 64 位服务器 VM 警告:忽略选项 MaxPermSize=512m;支持已在 8.0 22/02/25 11:00:28 中删除 错误未从用户代码中捕获抛出:java.lang.VerifyError: class frameless.functions.Spark2_4_LambdaVariable 覆盖最终方法 genCode.(Lorg/apache/spark/sql/catalyst/表达式/codegen/CodegenContext;)Lorg/apache/spark/sql/catalyst/expressions/codegen/ExprCode;在 java.lang.ClassLoader.defineClass1(Native Method) 在 java.lang.ClassLoader.defineClass(ClassLoader.java:757) 在 java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 在 java.net.URLClassLoader.defineClass (URLClassLoader.java:468) 在 java.net.URLClassLoader.access$100(URLClassLoader.java:74) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:369) 在 java.net.URLClassLoader$1.run(URLClassLoader .java:363) 在 java.security。

在此处输入图像描述


  def parse(df: DataFrame)(implicit entityCompanion: EntityCompanion): DataFrame = {
    implicit val messageEncoder: typedEncoders.GeneratedMessageEncoder = GeneratedMessageEncoder.encoder()
    val parseProto = ProtoSQL.udf { (protoValue: String) =>
      entityCompanion.parseFrom(Base64.getDecoder.decode(protoValue))
    }
    val parsedDf = df.withColumn("value", parseProto(col("payload.protoValue")))
    parsedDf
  }

}

object EntityMapper {
  type EntityCompanion = GeneratedMessageCompanion[_ <: GeneratedMessage]

  def getEntityCompanionObject(entityType: String): EntityCompanion = {
    EntityFactory.getEntity(entityType).getCompanion()
  }
}
4

0 回答 0