@Override public void execute() throws IOException, RecommenderBuildException { LenskitConfiguration dataConfig = input.getConfiguration(); LenskitRecommenderEngineBuilder builder = LenskitRecommenderEngine.newBuilder(); for (LenskitConfiguration config : environment.loadConfigurations(getConfigFiles())) { builder.addConfiguration(config); } builder.addConfiguration(dataConfig, ModelDisposition.EXCLUDED); Stopwatch timer = Stopwatch.createStarted(); LenskitRecommenderEngine engine = builder.build(); timer.stop(); logger.info("built model in {}", timer); File output = getOutputFile(); CompressionMode comp = CompressionMode.autodetect(output); logger.info("writing model to {}", output); Closer closer = Closer.create(); try { OutputStream stream = closer.register(new FileOutputStream(output)); stream = closer.register(comp.wrapOutput(stream)); engine.write(stream); } catch (Throwable th) { // NOSONAR using a closer throw closer.rethrow(th); } finally { closer.close(); } }
private LenskitRecommenderEngine loadEngine() throws RecommenderBuildException, IOException { File modelFile = options.get("model_file"); if (modelFile == null) { logger.info("creating fresh recommender"); LenskitRecommenderEngineBuilder builder = LenskitRecommenderEngine.newBuilder(); for (LenskitConfiguration config : environment.loadConfigurations(getConfigFiles())) { builder.addConfiguration(config); } builder.addConfiguration(input.getConfiguration()); Stopwatch timer = Stopwatch.createStarted(); LenskitRecommenderEngine engine = builder.build(); timer.stop(); logger.info("built recommender in {}", timer); return engine; } else { logger.info("loading recommender from {}", modelFile); LenskitRecommenderEngineLoader loader = LenskitRecommenderEngine.newLoader(); for (LenskitConfiguration config : environment.loadConfigurations(getConfigFiles())) { loader.addConfiguration(config); } loader.addConfiguration(input.getConfiguration()); Stopwatch timer = Stopwatch.createStarted(); LenskitRecommenderEngine engine; CompressionMode comp = CompressionMode.autodetect(modelFile); InputStream input = new FileInputStream(modelFile); try { input = comp.wrapInput(input); engine = loader.load(input); } finally { input.close(); } timer.stop(); logger.info("loaded recommender in {}", timer); return engine; } }