我在一个独立的群集中使用带有Spark的Drools。我想在启动时,即在map reduce任务之前,在所有工作节点上加载知识会话。我已经尝试将Statefull会话从驱动程序传递到从属节点,但它无法正常工作。因此,我的第一份工作大约需要900毫秒才能向知识生成器添加规则。
答案 0 :(得分:0)
在驱动程序上创建KnowledgeSession的最终变量,
final StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
您可以将ksession
对象传递给所有工作节点,
lines.foreachRDD(new Function<JavaRDD<String>, Void>() {
public Void call(JavaRDD<String> rdd) throws Exception {
List<String> facts = rdd.collect();
//Apply rules on facts here
ksession.execute(facts);
return null;
}
});