scala - 如何在spark中使用kryo序列化器注册StringType$

标签 scala apache-spark kryo

我正在尝试在 Spark 中使用 kryo 序列化器。我已经设置了 spark.kryo.registrationRequired=true 以确保我注册了所有必要的类。除了要求我注册自定义类之外,它还要求我注册 Spark 类,例如 StructType

虽然我已经注册了 Spark StringType,但它现在崩溃了,说我还需要注册 StringType$

com.esotericsoftware.kryo.KryoException (java.lang.IllegalArgumentException: Class is not registered: org.apache.spark.sql.types.StringType$
Note: To register this class use: kryo.register(org.apache.spark.sql.types.StringType$.class);
Serialization trace:
dataType (org.apache.spark.sql.types.StructField)
fields (org.apache.spark.sql.types.StructType))

我正在导入 Spark 隐式以便读取 json。我不确定这是否是导致问题的原因。

import spark.implicits._
val foo = spark.read.json(inPath).as[MyCaseClass]

我确实意识到将注册要求设置为 false 将阻止此错误,但在这种情况下我没有看到任何性能提升,因此我试图确保我注册了每个必要的类。

最佳答案

我遇到了同样的问题,经过一些实验,我设法用以下行解决了它:

Class.forName("org.apache.spark.sql.types.StringType$")

这样你就可以在 Kryo 中注册该类,它就会停止提示。

一个很好的引用:https://mail-archives.apache.org/mod_mbox/spark-user/201603.mbox/%3CCAHCfvsSyUpx78ZFS_A9ycxvtO1=Jp7DfCCAeJKHyHZ1sugqHEQ@mail.gmail.com%3E

干杯

关于scala - 如何在spark中使用kryo序列化器注册StringType$,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42867092/

相关文章:

scala - 如何在 Play Framework 项目中拆分 build.sbt?

scala - 聚集泛化和折叠泛化如何减少?

java - 获取 Spark 数据集中嵌套数组的最小值

scala - 在 Spark Structured Streaming 中将数据内部连接到左连接 DataFrame 时丢失条目

scala - Spark Scala 总结数据集的列元素?

Scala:从元组数组/RDD中获取第n个元素的总和

scala - 示例Spark程序

java - 从 Kafka 消费者反序列化 Java 对象

java - SPARK 转 HBase 写入

scala - Spark 流 : com. esotericsoftware.kryo.KryoException : java. lang.IllegalArgumentException : Class is not registered: scala. Tuple2$mcJZ$sp