package com.linkedin.cubert.examples; import java.io.IOException; import java.util.Iterator; import org.apache.pig.data.DataBag; import org.apache.pig.data.Tuple; import com.linkedin.cubert.block.BlockSchema; import com.linkedin.cubert.block.ColumnType; import com.linkedin.cubert.block.DataType; import com.linkedin.cubert.functions.Function; import com.linkedin.cubert.operator.PreconditionException; public class ArrayGetMinEntry extends Function { @Override public Object eval(Tuple input) throws IOException { DataBag bag = (DataBag) input.get(0); int index = (Integer) input.get(1); if (bag == null) return null; Iterator<Tuple> it = bag.iterator(); Tuple minTuple = null; Number minValue = null; while (it.hasNext()) { Tuple tuple = it.next(); Number field = (Number) tuple.get(index); if (field == null) continue; if (minTuple == null || minValue.doubleValue() > field.doubleValue()) { minTuple = tuple; minValue = field; } } return minTuple; } @Override public ColumnType outputSchema(BlockSchema inputSchema) throws PreconditionException { BlockSchema tupleSchema = inputSchema.getColumnType(0) .getColumnSchema() .getColumnType(0) .getColumnSchema(); ColumnType type = new ColumnType("", DataType.TUPLE); type.setColumnSchema(tupleSchema); return type; } }