package com.produban.openbus.analysis; import java.io.IOException; import java.util.HashMap; import org.apache.pig.EvalFunc; import org.apache.pig.data.DataType; import org.apache.pig.data.Tuple; import org.apache.pig.data.TupleFactory; import org.apache.pig.impl.logicalLayer.schema.Schema; public class ProxyLogParserUDF extends EvalFunc<Tuple> { private ProxyLogParser parser = new ProxyLogParser(); public Tuple exec(Tuple input) throws IOException { if (null == input || input.size() != 1) { return null; } String line = (String) input.get(0); try { TupleFactory tf = TupleFactory.getInstance(); Tuple tuple = tf.newTuple(); HashMap<String, String> parsedLine = parser.parse(line); tuple.append(parsedLine.get(ProxyLogParser.BATCHDATE)); tuple.append(parsedLine.get(ProxyLogParser.PROXYCLASS)); tuple.append(parsedLine.get(ProxyLogParser.PROXYIP)); tuple.append(parsedLine.get(ProxyLogParser.USER)); tuple.append(parsedLine.get(ProxyLogParser.REQUESTDATE)); tuple.append(parsedLine.get(ProxyLogParser.HTTPMETHOD)); tuple.append(parsedLine.get(ProxyLogParser.URL)); tuple.append(parsedLine.get(ProxyLogParser.HTTPSTATUS)); tuple.append(parsedLine.get(ProxyLogParser.PORT)); tuple.append(parsedLine.get(ProxyLogParser.SQUIDRESULTCODE)); tuple.append(parsedLine.get(ProxyLogParser.SQUIDHIERARCHYCODE)); tuple.append(parsedLine.get(ProxyLogParser.POLICY)); tuple.append(parsedLine.get(ProxyLogParser.EXTRAFIELDS)); tuple.append(parsedLine.get(ProxyLogParser.CLIENTIP)); return tuple; } catch (Exception e) { return null; } } public Schema outputSchema(Schema input) { try { Schema s = new Schema(); s.add(new Schema.FieldSchema(ProxyLogParser.BATCHDATE, DataType.CHARARRAY)); s.add(new Schema.FieldSchema(ProxyLogParser.PROXYCLASS, DataType.CHARARRAY)); s.add(new Schema.FieldSchema(ProxyLogParser.PROXYIP, DataType.CHARARRAY)); s.add(new Schema.FieldSchema(ProxyLogParser.USER, DataType.CHARARRAY)); s.add(new Schema.FieldSchema(ProxyLogParser.REQUESTDATE, DataType.CHARARRAY)); s.add(new Schema.FieldSchema(ProxyLogParser.HTTPMETHOD, DataType.CHARARRAY)); s.add(new Schema.FieldSchema(ProxyLogParser.URL, DataType.CHARARRAY)); s.add(new Schema.FieldSchema(ProxyLogParser.HTTPSTATUS, DataType.CHARARRAY)); s.add(new Schema.FieldSchema(ProxyLogParser.PORT, DataType.CHARARRAY)); s.add(new Schema.FieldSchema(ProxyLogParser.SQUIDRESULTCODE, DataType.CHARARRAY)); s.add(new Schema.FieldSchema(ProxyLogParser.SQUIDHIERARCHYCODE, DataType.CHARARRAY)); s.add(new Schema.FieldSchema(ProxyLogParser.POLICY, DataType.CHARARRAY)); s.add(new Schema.FieldSchema(ProxyLogParser.EXTRAFIELDS, DataType.CHARARRAY)); s.add(new Schema.FieldSchema(ProxyLogParser.CLIENTIP, DataType.CHARARRAY)); return s; } catch (Exception e) { return null; } } }