меня Kryo сериализации включен с этим:Требовать Kryo сериализации в Спарк (Scala)
conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
Я хочу, чтобы гарантировать, что пользовательский класс сериализации с помощью Kryo когда перемешиваются между узлами. Я могу зарегистрировать класс с Kryo таким образом:
conf.registerKryoClasses(Array(classOf[Foo]))
Как я понимаю, это на самом деле не гарантирует, что KYRO сериализации используется; если сериализатор недоступен, kryo вернется к сериализации Java.
Чтобы гарантировать, что Kryo Сериализация происходит, я последовал эту рекомендацию из документации Spark:
conf.set("spark.kryo.registrationRequired", "true")
Но это приводит к IllegalArugmentException быть выброшено («Класс не зарегистрирован») для связки различных классов, которые я предположим, Спарк использует внутренне, например, следующее:
org.apache.spark.util.collection.CompactBuffer
scala.Tuple3
Конечно, я не должен вручную зарегистрировать каждый из этих отдельных классов с Kryo? Эти сериализаторы определены в kryo, так есть ли способ автоматически зарегистрировать их все?
Я использовал SparkConf.registerKryoClasses, и я был уверен, что нашел в документации где-нибудь, но не могу найти его сейчас. Я буду использовать параметр spark.kryo.classesToRegister. – pheaver
@ Daniel Darabos: У моего модельного класса есть только getter и seters, которые я хочу зарегистрировать с помощью kryo, мне нужно зарегистрировать типы данных, которые также используются внутри класса модели .. например, String type. – Shankar
'String' зарегистрирован по умолчанию, как и все примитивные классы, такие как' Long'. Но в целом вам нужно будет зарегистрировать все, что содержится внутри класса, который вы хотите сериализовать. Вам не нужно слишком много думать: если вы ничего не зарегистрировали, вы получите сообщение об ошибке, если вы включили 'spark.kryo.registrationRequired'. –