Как зарегистрировать 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

ура

Другие вопросы по тегам