package com.aliyun.odps.udf.example.text; import com.aliyun.odps.data.Record; import com.aliyun.odps.io.OutputStreamSet; import com.aliyun.odps.io.SinkOutputStream; import com.aliyun.odps.udf.DataAttributes; import com.aliyun.odps.udf.ExecutionContext; import com.aliyun.odps.udf.Outputer; import java.io.IOException; public class TextOutputer extends Outputer { private SinkOutputStream outputStream; private DataAttributes attributes; private String delimiter; public TextOutputer (){ // default delimiter, this can be overwritten if a delimiter is provided through the attributes. this.delimiter = "|"; } @Override public void output(Record record) throws IOException { this.outputStream.write(recordToString(record).getBytes()); } // no particular usage of execution context in this example @Override public void setup(ExecutionContext ctx, OutputStreamSet outputStreamSet, DataAttributes attributes) { this.outputStream = outputStreamSet.next(); this.attributes = attributes; } @Override public void close() { // no-op } private String recordToString(Record record){ StringBuilder sb = new StringBuilder(); for (int i = 0; i < record.getColumnCount(); i++) { if (null == record.get(i)){ sb.append("NULL"); } else{ sb.append(record.get(i).toString()); } if (i != record.getColumnCount() - 1){ sb.append(this.delimiter); } } sb.append("\n"); return sb.toString(); } }