package eu.leads.processor;
import eu.leads.processor.execute.Tuple;
import eu.leads.processor.execute.operators.JoinMapper;
import eu.leads.processor.execute.operators.JoinOperator;
import eu.leads.processor.execute.operators.JoinReducer;
import eu.leads.processor.utils.InfinispanUtils;
import eu.leads.processor.utils.Utilities;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;
import org.infinispan.Cache;
import org.infinispan.distexec.mapreduce.MapReduceTask;
import java.util.Properties;
import java.util.concurrent.ConcurrentMap;
/**
* Created with IntelliJ IDEA.
* User: vagvaz
* Date: 11/7/13
* Time: 9:11 AM
* To change this template use File | Settings | File Templates.
*/
public class JoinOperatorTest {
private static final String[] columnNames = {"url", "anark", "pagerank", "body", "sentiment"};
private static final String[] columnType = {"string", "string", "int", "string", "double"};
private static final String[] columnNamesB = {"foo", "bbark", "dfs", "adf", "ddddd"};
private static final String[] columnTypeB = {"string", "string", "int", "string", "double"};
public static void main(String[] args) {
Table l = new Table("", "webpages");
Table r = new Table("", "project");
Column lc = new Column(l, "url");
Column lr = new Column(r, "foo");
InfinispanUtils.start();
int numOfTuples = 10;
ConcurrentMap<String, String> data = InfinispanUtils.getOrCreatePersistentMap(l.getName() + ":");
for (int i = 0; i < numOfTuples; i++) {
Tuple t = Utilities.generateTuple(columnNames, columnType);
data.put(l.getName() + ":" + (Integer.toString(i)), t.asString());
}
data = InfinispanUtils.getOrCreatePersistentMap(r.getName() + ":");
for (int i = 0; i < numOfTuples; i++) {
Tuple t = Utilities.generateTuple(columnNamesB, columnTypeB);
data.put(r.getName() + ":" + (Integer.toString(i)), t.asString());
}
JoinOperator join = new JoinOperator("test", "theoutput", l, r, lc, lr);
Properties conf = new Properties();
conf.setProperty("left", join.getLeft().getName() + ":");
conf.setProperty("right", join.getRight().getName() + ":");
conf.setProperty(join.getRight().getName() + ":", join.getRightColumn().getColumnName());
conf.setProperty(join.getLeft().getName() + ":", join.getLeftColumn().getColumnName());
conf.setProperty("output", join.getName());
ConcurrentMap<String, String> inputMap = InfinispanUtils.getOrCreatePersistentMap(join.getName() + ".input");
inputMap.put(join.getLeft().getName() + ":", join.getLeft().getName() + ":");
inputMap.put(join.getRight().getName() + ":", join.getRight().getName() + ":");
MapReduceTask<String, String, String, String> task = new MapReduceTask<String, String, String, String>((Cache<String, String>) inputMap);
task.mappedWith(new JoinMapper(conf)).reducedWith(new JoinReducer(conf));
task.execute();
ConcurrentMap<String, String> out = InfinispanUtils.getOrCreatePersistentMap(join.getName() + ":");
Utilities.printMap(out);
System.out.println("bye bye");
InfinispanUtils.stop();
// output
//and create a map for keys
}
}