public Object process(Node nd, Stack<Node> stack, NodeProcessorCtx procCtx,
Object... nodeOutputs) throws SemanticException {
MapJoinOperator mapJoin = (MapJoinOperator)nd;
GenMRProcContext opProcCtx = (GenMRProcContext)procCtx;
mapredWork cplan = GenMapRedUtils.getMapRedWork();
ParseContext parseCtx = opProcCtx.getParseCtx();
Task<? extends Serializable> redTask = TaskFactory.get(cplan, parseCtx.getConf());
Task<? extends Serializable> currTask = opProcCtx.getCurrTask();
// find the branch on which this processor was invoked
int pos = getPositionParent(mapJoin, stack);
boolean local = (pos == ((mapJoinDesc)mapJoin.getConf()).getPosBigTable()) ? false : true;
GenMapRedUtils.splitTasks(mapJoin, currTask, redTask, opProcCtx, false, local, pos);
currTask = opProcCtx.getCurrTask();
HashMap<Operator<? extends Serializable>, Task<? extends Serializable>> opTaskMap = opProcCtx.getOpTaskMap();
Task<? extends Serializable> opMapTask = opTaskMap.get(mapJoin);
// If the plan for this reducer does not exist, initialize the plan
if (opMapTask == null) {
assert cplan.getReducer() == null;
opTaskMap.put(mapJoin, currTask);
opProcCtx.setCurrMapJoinOp(null);
}
// The current plan can be thrown away after being merged with the original plan
else {