private void checkIter() { if (internal == null) { internal = closureLocal.getIterator(iteratorNum); } }
public boolean isSelfJoin() { return valueFields.length == 1 && size() != valueFields.length; }
protected boolean isOuter( int i ) { return closure.isEmpty( i ); }
@Override public void operate( FlowProcess flowProcess, BufferCall bufferCall ) { JoinerClosure joinerClosure = bufferCall.getJoinerClosure(); if( joinerClosure.size() != 2 ) throw new IllegalArgumentException( "joiner size wrong" ); Iterator<Tuple> lhs = joinerClosure.getIterator( 0 ); while( lhs.hasNext() ) { Tuple lhsTuple = lhs.next(); Iterator<Tuple> rhs = joinerClosure.getIterator( 1 ); while( rhs.hasNext() ) { Tuple rhsTuple = rhs.next(); Tuple result = new Tuple(); result.addAll( lhsTuple ); result.addAll( rhsTuple ); bufferCall.getOutputCollector().add( result ); } } } }
protected void init() iterators = new Iterator[ closure.size() ]; for( int i = 0; i < closure.size(); i++ ) iterators[ i ] = getIterator( i ); for( Fields fields : closure.getValueFields() ) isUnknown |= fields.isUnknown(); Fields[] fields = closure.getValueFields(); if( closure.isSelfJoin() ) fields = new Fields[ closure.size() ]; Arrays.fill( fields, closure.getValueFields()[ 0 ] );
@Override protected void init() { singletons = new List[ closure.size() ]; for( int i = 0; i < singletons.length; i++ ) { if( isOuter( i ) ) singletons[ i ] = Collections.singletonList( Tuple.size( closure.getValueFields()[ i ].size() ) ); } super.init(); }
protected Iterator getIterator( int i ) { return closure.getIterator( i ); }
@Override protected boolean isOuter( int i ) { return i == closure.size() - 1 && super.isOuter( i ); } }
public JoinIterator( JoinerClosure closure ) { this.closure = closure; LOG.debug( "cogrouped size: {}", closure.size() ); init(); }