Как зарегистрировать StringType$, используя сериализатор kryo в spark
Я пытаюсь использовать Kryo сериализатор в искре. Я поставил spark.kryo.registrationRequired=true
чтобы убедиться, что я регистрирую все необходимые классы. Помимо требования, чтобы я зарегистрировал свои собственные классы, он также просит меня зарегистрировать классы спарк, как StructType
,
Хотя я зарегистрировал искру 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))
Я импортирую импактные эффекты, чтобы читать в формате json. Я не уверен, что это усугубляет проблему.
import spark.implicits._
val foo = spark.read.json(inPath).as[MyCaseClass]
Я действительно понимаю, что установка регистрации, требуемой для false, остановит эту ошибку, но я не вижу никакого увеличения производительности в этом случае, поэтому пытаюсь удостовериться, что я регистрирую каждый необходимый класс.
1 ответ
Я столкнулся с той же проблемой, и после некоторых экспериментов мне удалось решить ее следующей строкой:
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
ура