gpt4 book ai didi

java - Spark & Drools - 如何使用 Kryo 序列化 KieBase

转载 作者:行者123 更新时间:2023-12-02 12:49:53 26 4
gpt4 key购买 nike

我在尝试序列化 Spark 中的 KieBase 对象时遇到异常。

当我执行以下代码时:

val kieBase = kieContainer.getKieBase
val broadcastKieBase = spark.sparkContext.broadcast(kieBase)

引发ConcurrentModificationException

Exception in thread "main" com.esotericsoftware.kryo.KryoException: java.util.ConcurrentModificationException

环顾四周,我还发现了 this is a known problem ,但还是没有解决。

有人知道如何使用 Kryo 序列化 KieBase 实例吗?

最佳答案

如果您通过设置 .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer") 来使用 KryoSerializer 执行 Spark 作业,或者将其设置为 KryoSerializer 作为默认,然后请按照以下步骤操作:

通过扩展org.apache.spark.serializer.KryoRegistrator创建DroolsSerializerRegistration类。为com.esotericsoftware.kryo.serializers.JavaSerializer注册类org.drools.core.impl.KnowledgeBaseImpl,如下所示:

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 库关联的类,而不是所有失败的类。

关于java - Spark & Drools - 如何使用 Kryo 序列化 KieBase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44635932/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com