/** グループごとの最小値を求めるテスト。 */ @Test public void withParameter() { List<StageModel> stages = compile(GroupSortFlowWithParameter.class); StageModel stage = stages.get(0); Assume.assumeThat(stage.getReduceUnits().size(), is(1)); ReduceUnit reduce = stage.getReduceUnits().get(0); Fragment fragment = reduce.getFragments().get(0); Name name = fragment.getCompiled().getQualifiedName(); ClassLoader loader = start(); PortMapper mapper = new PortMapper(fragment); MockResult<Ex1> r1 = mapper.add("r1", new Ex1Copier()); MockResult<Ex1> r2 = mapper.add("r2", new Ex1Copier()); @SuppressWarnings("unchecked") Rendezvous<Writable> f = (Rendezvous<Writable>) create(loader, name, mapper.toArguments()); Segment segment = stage.getShuffleModel().findSegment(fragment.getInputPorts().get(0)); SegmentedWritable value = createShuffleValue(loader, stage); Ex1 ex1 = new Ex1(); f.begin(); ex1.setValue(50); setShuffleValue(segment, value, ex1); f.process(value); ex1.setValue(100); setShuffleValue(segment, value, ex1); f.process(value); ex1.setValue(101); setShuffleValue(segment, value, ex1); f.process(value); ex1.setValue(150); setShuffleValue(segment, value, ex1); f.process(value); f.end(); assertThat(r1.getResults().size(), is(2)); assertThat(r2.getResults().size(), is(2)); assertThat(r1.getResults().get(0).getValue(), is(50)); assertThat(r1.getResults().get(1).getValue(), is(100)); assertThat(r2.getResults().get(0).getValue(), is(101)); assertThat(r2.getResults().get(1).getValue(), is(150)); }
/** * ステージブロックを解析して断片までの解析が終わったステージの構造を返す。 * * @param block ステージブロック * @return 断片までの解析が終わったステージの構造 * @throws IOException 出力に失敗した場合 */ protected StageModel compileFragments(StageBlock block) throws IOException { ShuffleModel shuffle = compileShuffle(block); StageModel stage = new StageAnalyzer(environment).analyze(block, shuffle); for (MapUnit unit : stage.getMapUnits()) { for (Fragment fragment : unit.getFragments()) { compile(fragment, stage); } } for (ReduceUnit unit : stage.getReduceUnits()) { for (Fragment fragment : unit.getFragments()) { compile(fragment, stage); } } return stage; }