我正在尝试在 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 中注册该类,它就会停止提示。
干杯
关于scala - 如何在spark中使用kryo序列化器注册StringType$,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42867092/