@Override public String toPartition( TupleEntry tupleEntry ) { String partition = Util.join( tupleEntry.asIterableOf( String.class ), delimiter, true ); if( postfix != null ) partition = partition + postfix; // delimiter prefixed in ctor return partition; } }
protected boolean matchWholeTuple( Matcher matcher, TupleEntry input ) { Iterable<String> iterable = input.asIterableOf( String.class ); String join = Util.join( iterable, delimiter, false ); matcher.reset( join ); boolean matchFound = matcher.find(); if( LOG.isDebugEnabled() ) LOG.debug( "pattern: {}, matches: {}", getPatternString(), matchFound ); return matchFound == negateMatch; }
@Override public boolean isRemove(@SuppressWarnings("rawtypes") FlowProcess flowProcess, FilterCall<Void> filterCall) { PrintStream stream = streamSupplier.getPrintStream(); if (firstRecord) { stream.append(prefix); for (Comparable<?> value : filterCall.getArguments().getFields().select(fieldsOfInterest)) { stream.append(value.toString()); stream.append('\t'); } stream.append('\n'); firstRecord = false; } stream.append(prefix); for (String value : filterCall.getArguments().selectEntry(fieldsOfInterest).asIterableOf(String.class)) { stream.append(value); stream.append('\t'); } stream.append('\n'); return false; }
/** * Method getValue ... * * @param functionCall of FunctionCall<Context> * @return String */ protected String getValue( FunctionCall<Context> functionCall ) { // if one argument if( functionCall.getArguments().size() == 1 ) return functionCall.getArguments().getString( 0 ); // if many arguments Iterator<String> values = functionCall.getArguments().asIterableOf( String.class ).iterator(); StringBuilder result = new StringBuilder(); while( values.hasNext() ) { String next = values.next(); if( next != null ) result.append( next ); } return result.toString(); }
@Override public void sink( FlowProcess<? extends Properties> flowProcess, SinkCall<PrintWriter, OutputStream> sinkCall ) throws IOException { TupleEntry tupleEntry = sinkCall.getOutgoingEntry(); Iterable<String> strings = tupleEntry.asIterableOf( String.class ); delimitedParser.joinLine( strings, sinkCall.getContext() ); sinkCall.getContext().println(); }
@Override public void sink( FlowProcess<? extends Configuration> flowProcess, SinkCall<Object[], OutputCollector> sinkCall ) throws IOException { TupleEntry tupleEntry = sinkCall.getOutgoingEntry(); Text text = (Text) sinkCall.getContext()[ 0 ]; StringBuilder line = (StringBuilder) sinkCall.getContext()[ 1 ]; Charset charset = (Charset) sinkCall.getContext()[ 2 ]; Iterable<String> strings = tupleEntry.asIterableOf( String.class ); line = (StringBuilder) delimitedParser.joinLine( strings, line ); text.set( line.toString().getBytes( charset ) ); sinkCall.getOutput().collect( null, text ); line.setLength( 0 ); }
@Override public void sink( FlowProcess<? extends Configuration> flowProcess, SinkCall<Object[], OutputCollector> sinkCall ) throws IOException { TupleEntry tupleEntry = sinkCall.getOutgoingEntry(); Text text = (Text) sinkCall.getContext()[ 0 ]; StringBuilder line = (StringBuilder) sinkCall.getContext()[ 1 ]; Charset charset = (Charset) sinkCall.getContext()[ 2 ]; Iterable<String> strings = tupleEntry.asIterableOf( String.class ); line = (StringBuilder) delimitedParser.joinLine( strings, line ); text.set( line.toString().getBytes( charset ) ); sinkCall.getOutput().collect( null, text ); line.setLength( 0 ); }
@Test public void testCoerceIterable() { final SimpleDateFormat dateFormat = new SimpleDateFormat( "dd/MMM/yyyy:HH:mm:ss:SSS Z" ); CoercibleType coercible = new DateType( "dd/MMM/yyyy:HH:mm:ss:SSS Z", TimeZone.getDefault() ); Date date = new Date(); String stringDate = dateFormat.format( date ); Tuple tuple = Tuple.size( 4 ); Fields fields = Fields.size( 4 ).applyTypes( coercible, coercible, coercible, String.class ); TupleEntry results = new TupleEntry( fields, tuple ); results.setObject( 0, date ); results.setLong( 1, date.getTime() ); results.setString( 2, stringDate ); results.setString( 3, stringDate ); Iterable<String> iterable = results.asIterableOf( String.class ); int count = 0; for( String s : iterable ) { assertEquals( stringDate, s ); count++; } assertEquals( count, results.size() ); }