Java 口水-火花性能问题

Java 口水-火花性能问题,java,performance,apache-spark,configuration,drools,Java,Performance,Apache Spark,Configuration,Drools,我使用Spark streaming处理多个CSV文件。文件验证经常由于下游系统而发生更改。为此,我们决定探索ApacheDrools。在使用Drools之前,大文件在几秒钟内就完成了处理。在Drool中添加少量规则后,性能显著下降。对于5MB文件系统,处理需要3-4分钟。我不熟悉Spark和Drools,想了解如何在Java中同时使用它们。我遇到了多个答案,但不明白如何使用它 代码如下: @Configuration @Slf4j public class DroolConfig { pri

我使用Spark streaming处理多个CSV文件。文件验证经常由于下游系统而发生更改。为此,我们决定探索ApacheDrools。在使用Drools之前,大文件在几秒钟内就完成了处理。在Drool中添加少量规则后,性能显著下降。对于5MB文件系统,处理需要3-4分钟。我不熟悉Spark和Drools,想了解如何在Java中同时使用它们。我遇到了多个答案,但不明白如何使用它

代码如下:

@Configuration
@Slf4j
public class DroolConfig {

private KieServices kieServices = KieServices.Factory.get();

private KieFileSystem getKieFileSystem() throws IOException {
    KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
    kieFileSystem.write(ResourceFactory.newClassPathResource("drlrules/rules.drl"));
    return kieFileSystem;

}

@Bean
public KieContainer getKieContainer() throws IOException {
    log.info("Container created...");
    getKieRepository();
    KieBuilder kb = kieServices.newKieBuilder(getKieFileSystem());
    kb.buildAll();
    KieModule kieModule = kb.getKieModule();
    KieContainer kContainer = kieServices.newKieContainer(kieModule.getReleaseId());
    return kContainer;

}

private void getKieRepository() {
    final KieRepository kieRepository = kieServices.getRepository();
    kieRepository.addKieModule(new KieModule() {
        public ReleaseId getReleaseId() {
            return kieRepository.getDefaultReleaseId();
        }
    });
}

@Bean
public KieSession getKieSession() throws IOException {
    log.info("session created...");
    return getKieContainer().newKieSession();

}
验证文件:

@Autowired
private KieSession session;
.....
javaRDD1.collect().forEach(col -> {
        if(idx[0] > 0) {
            clientModel.setCsvLine(Arrays.asList(col));
            clientModel.setFileName(file.getName());

            FactHandle handle = session.insert(clientModel);
            session.fireAllRules();
            session.delete(handle);
        }

        idx[0]++;
    });

我想JBoss是Drools,而不是apache?你是否真的在单独发送规则中的每一行?这似乎非常低效。请同时发布一个示例规则,否则我们无法判断您的规则是否是低效的另一个来源。