Java 口水-火花性能问题
我使用Spark streaming处理多个CSV文件。文件验证经常由于下游系统而发生更改。为此,我们决定探索ApacheDrools。在使用Drools之前,大文件在几秒钟内就完成了处理。在Drool中添加少量规则后,性能显著下降。对于5MB文件系统,处理需要3-4分钟。我不熟悉Spark和Drools,想了解如何在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
@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?你是否真的在单独发送规则中的每一行?这似乎非常低效。请同时发布一个示例规则,否则我们无法判断您的规则是否是低效的另一个来源。