Package edu.isi.karma.storm

Source Code of edu.isi.karma.storm.KarmaBolt

package edu.isi.karma.storm;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Map;
import java.util.Properties;

import org.json.JSONArray;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import backtype.storm.task.OutputCollector;
import backtype.storm.task.TopologyContext;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.base.BaseRichBolt;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.Values;
import edu.isi.karma.kr2rml.writer.JSONKR2RMLRDFWriter;
import edu.isi.karma.kr2rml.writer.KR2RMLRDFWriter;
import edu.isi.karma.mapreduce.driver.BaseKarma;
import edu.isi.karma.rdf.RDFGeneratorRequest;

public class KarmaBolt extends BaseRichBolt {

  private static Logger LOG = LoggerFactory.getLogger(KarmaBolt.class);
  protected BaseKarma karma;
  /**
   *
   */
  private static final long serialVersionUID = 1L;
  private OutputCollector outputCollector;
  private Properties config;

  public KarmaBolt(Properties config)
  {
    this.config = config;
  }
 
  @Override
  public void execute(Tuple tuple) {
   
    System.out.println("My name is: " + config.getProperty("name"));
    long start = System.currentTimeMillis();
    System.out.println("id: "+tuple.getStringByField("id"));
    StringWriter sw = new StringWriter();
    KR2RMLRDFWriter outWriter = configureRDFWriter(sw);
    try {
      RDFGeneratorRequest request = new RDFGeneratorRequest("model", tuple.getStringByField("id"));
      request.addWriter(outWriter);
      request.setInputData(tuple.getStringByField("text"));
      request.setDataType(karma.getInputType());
      karma.getGenerator().generateRDF(request);
      String results = sw.toString();
      if (!results.equals("[\n\n]\n")) {
        writeRDF(tuple, results);
      }
    } catch (Exception e) {
      LOG.error("Unable to generate RDF: " + e.getMessage());
     
    }
    finally{
      outputCollector.ack(tuple);
    }
    System.out.println("id: "+ tuple.getStringByField("id") + " " + (System.currentTimeMillis() - start));
  }

  protected KR2RMLRDFWriter configureRDFWriter(StringWriter sw) {
    PrintWriter pw = new PrintWriter(sw);
    KR2RMLRDFWriter outWriter = new JSONKR2RMLRDFWriter(pw, karma.getBaseURI());
    return outWriter;
  }

  protected void writeRDF(Tuple tuple, String results)
      throws IOException, InterruptedException {
    JSONArray generatedObjects = new JSONArray(results);
    for(int i = 0; i < generatedObjects.length(); i++)
    {
      outputCollector.emit(tuple, new Values(generatedObjects.getJSONObject(i).getString("@id"), generatedObjects.getJSONObject(i).toString(), karma.getModel().toString() ));
     
    }
  }
 
  @Override
  public void prepare(Map configMap, TopologyContext arg1, OutputCollector outputCollector) {
    this.outputCollector = outputCollector;
    karma = new BaseKarma();
    karma.setup(config.getProperty("karma.input.type"), config.getProperty("model.uri"), config.getProperty("model.file"), config.getProperty("base.uri"), config.getProperty("context.uri"));
   
  }

  @Override
  public void declareOutputFields(OutputFieldsDeclarer outputFields) {
    outputFields.declare(new Fields("id", "json", "model"));
   
  }
}
TOP

Related Classes of edu.isi.karma.storm.KarmaBolt

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.