Если вы выполняете задание Spark с помощью KryoSerializer, установив .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
, или для него задано значение KryoSerializer по умолчанию, выполните следующие действия:
Создайте класс DroolsSerializerRegistration, расширив org.apache.spark.serializer.KryoRegistrator
. Зарегистрируйте класс org.drools.core.impl.KnowledgeBaseImpl
для com.esotericsoftware.kryo.serializers.JavaSerializer
, как показано ниже:
package com.spark.kryo.serializers
import com.esotericsoftware.kryo.Kryo
import com.esotericsoftware.kryo.serializers.JavaSerializer
import org.apache.spark.serializer.KryoRegistrator
class DroolsSerializerRegistration extends KryoRegistrator {
override def registerClasses(kryo: Kryo) {
kryo.register(classOf[org.drools.core.impl.KnowledgeBaseImpl], new JavaSerializer)
}
}
Затем установите конфигурацию ниже в SparkConf .config("spark.kryo.registrator", "com.spark.kryo.serializers.DroolsSerializerRegistration")
Если вы не уверены, что это не работает из-за org.drools.core.impl.KnowledgeBaseImpl
, установите конфигурацию ниже в SparkConf, чтобы получить точный класс, вызывающий проблему. .config("spark.kryo.registrationRequired", "true")
В некоторых случаях он может дать несколько классов, а затем зарегистрировать все классы с помощью com.esotericsoftware.kryo.serializers.JavaSerializer
. Как только вы определите все классы, связанные с Drools, удалите spark.kryo.registrationRequired
и зарегистрируйте только те классы, которые связаны с библиотекой Drools, а не все, которые были неудачными.
person
Ganesh Shinde
schedule
05.07.2021