package org.plista.kornakapi.core.training; import java.io.File; import java.io.IOException; import org.apache.mahout.cf.taste.model.DataModel; import org.plista.kornakapi.core.cluster.StreamingKMeansClassifierModel; import org.plista.kornakapi.core.config.StreamingKMeansClustererConfig; public class StreamingKMeansClustererTrainer extends AbstractTrainer{ StramingKMeansClusterer clusterer; long start; private boolean firstTraining = true; private long clusterTimeWindow; public StreamingKMeansClustererTrainer(StreamingKMeansClustererConfig conf, StreamingKMeansClassifierModel model) throws IOException { super(conf); clusterer = new StramingKMeansClusterer(model, conf.getDesiredNumCluster(), conf.getDistanceCutoff()); clusterTimeWindow = conf.getClusterTimeWindow(); start = System.currentTimeMillis(); } @Override protected void doTrain(File targetFile, DataModel inmemoryData, int numProcessors) throws IOException { if(start - System.currentTimeMillis() > clusterTimeWindow || firstTraining){ //if 12 hours passed retrain hole model clusterer.cluster(); start = System.currentTimeMillis(); firstTraining = false; }else{ clusterer.stream(); } } }