package com.scaleunlimited.cascading; import java.util.Iterator; import cascading.flow.FlowProcess; import cascading.operation.BaseOperation; import cascading.operation.Buffer; import cascading.operation.BufferCall; import cascading.tuple.Fields; import cascading.tuple.TupleEntry; @SuppressWarnings("serial") public class GroupLimit extends BaseOperation<NullContext> implements Buffer<NullContext> { private int _maxInGroup; public GroupLimit(int maxInGroup) { super(Fields.ARGS); if (maxInGroup < 1) { throw new IllegalArgumentException("maxInGroup parameter must be > 0"); } _maxInGroup = maxInGroup; } @Override public void operate(FlowProcess flowProcess, BufferCall<NullContext> bufferCall) { int curCount = 0; Iterator<TupleEntry> iter = bufferCall.getArgumentsIterator(); while (iter.hasNext() && (curCount < _maxInGroup)) { bufferCall.getOutputCollector().add(iter.next()); curCount += 1; } } }