/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.hadoop.hive.contrib.udaf.example; import org.apache.hadoop.hive.ql.exec.UDAF; import org.apache.hadoop.hive.ql.exec.UDAFEvaluator; import org.apache.hadoop.hive.ql.exec.Description; import org.apache.hadoop.hive.serde2.io.DoubleWritable; import org.apache.hadoop.hive.serde2.io.ShortWritable; import org.apache.hadoop.hive.shims.ShimLoader; import org.apache.hadoop.io.FloatWritable; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; @Description(name = "example_min", value = "_FUNC_(expr) - Returns the minimum value of expr") public class UDAFExampleMin extends UDAF { static public class MinShortEvaluator implements UDAFEvaluator { private short mMin; private boolean mEmpty; public MinShortEvaluator() { super(); init(); } public void init() { mMin = 0; mEmpty = true; } public boolean iterate(ShortWritable o) { if (o != null) { if (mEmpty) { mMin = o.get(); mEmpty = false; } else { mMin = (short) Math.min(mMin, o.get()); } } return true; } public ShortWritable terminatePartial() { return mEmpty ? null : new ShortWritable(mMin); } public boolean merge(ShortWritable o) { return iterate(o); } public ShortWritable terminate() { return mEmpty ? null : new ShortWritable(mMin); } } static public class MinIntEvaluator implements UDAFEvaluator { private int mMin; private boolean mEmpty; public MinIntEvaluator() { super(); init(); } public void init() { mMin = 0; mEmpty = true; } public boolean iterate(IntWritable o) { if (o != null) { if (mEmpty) { mMin = o.get(); mEmpty = false; } else { mMin = Math.min(mMin, o.get()); } } return true; } public IntWritable terminatePartial() { return mEmpty ? null : new IntWritable(mMin); } public boolean merge(IntWritable o) { return iterate(o); } public IntWritable terminate() { return mEmpty ? null : new IntWritable(mMin); } } static public class MinLongEvaluator implements UDAFEvaluator { private long mMin; private boolean mEmpty; public MinLongEvaluator() { super(); init(); } public void init() { mMin = 0; mEmpty = true; } public boolean iterate(LongWritable o) { if (o != null) { if (mEmpty) { mMin = o.get(); mEmpty = false; } else { mMin = Math.min(mMin, o.get()); } } return true; } public LongWritable terminatePartial() { return mEmpty ? null : new LongWritable(mMin); } public boolean merge(LongWritable o) { return iterate(o); } public LongWritable terminate() { return mEmpty ? null : new LongWritable(mMin); } } static public class MinFloatEvaluator implements UDAFEvaluator { private float mMin; private boolean mEmpty; public MinFloatEvaluator() { super(); init(); } public void init() { mMin = 0; mEmpty = true; } public boolean iterate(FloatWritable o) { if (o != null) { if (mEmpty) { mMin = o.get(); mEmpty = false; } else { mMin = Math.min(mMin, o.get()); } } return true; } public FloatWritable terminatePartial() { return mEmpty ? null : new FloatWritable(mMin); } public boolean merge(FloatWritable o) { return iterate(o); } public FloatWritable terminate() { return mEmpty ? null : new FloatWritable(mMin); } } static public class MinDoubleEvaluator implements UDAFEvaluator { private double mMin; private boolean mEmpty; public MinDoubleEvaluator() { super(); init(); } public void init() { mMin = 0; mEmpty = true; } public boolean iterate(DoubleWritable o) { if (o != null) { if (mEmpty) { mMin = o.get(); mEmpty = false; } else { mMin = Math.min(mMin, o.get()); } } return true; } public DoubleWritable terminatePartial() { return mEmpty ? null : new DoubleWritable(mMin); } public boolean merge(DoubleWritable o) { return iterate(o); } public DoubleWritable terminate() { return mEmpty ? null : new DoubleWritable(mMin); } } static public class MinStringEvaluator implements UDAFEvaluator { private Text mMin; private boolean mEmpty; public MinStringEvaluator() { super(); init(); } public void init() { mMin = null; mEmpty = true; } public boolean iterate(Text o) { if (o != null) { if (mEmpty) { mMin = new Text(o); mEmpty = false; } else if (mMin.compareTo(o) > 0) { mMin.set(o); } } return true; } public Text terminatePartial() { return mEmpty ? null : mMin; } public boolean merge(Text o) { return iterate(o); } public Text terminate() { return mEmpty ? null : mMin; } } }