/**
* 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.ql.udf;
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDAF;
import org.apache.hadoop.hive.ql.exec.UDAFEvaluator;
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;
/**
* UDAFTestMax.
*
*/
@Description(name = "test_max",
value = "_FUNC_(col) - UDF to report Max Value")
public class UDAFTestMax extends UDAF {
/**
* MaxShortEvaluator.
*
*/
public static class MaxShortEvaluator implements UDAFEvaluator {
private short mMax;
private boolean mEmpty;
public MaxShortEvaluator() {
super();
init();
}
public void init() {
mMax = 0;
mEmpty = true;
}
public boolean iterate(ShortWritable o) {
if (o != null) {
if (mEmpty) {
mMax = o.get();
mEmpty = false;
} else {
mMax = (short) Math.max(mMax, o.get());
}
}
return true;
}
public ShortWritable terminatePartial() {
return mEmpty ? null : new ShortWritable(mMax);
}
public boolean merge(ShortWritable o) {
return iterate(o);
}
public ShortWritable terminate() {
return mEmpty ? null : new ShortWritable(mMax);
}
}
/**
* MaxIntEvaluator.
*
*/
public static class MaxIntEvaluator implements UDAFEvaluator {
private int mMax;
private boolean mEmpty;
public MaxIntEvaluator() {
super();
init();
}
public void init() {
mMax = 0;
mEmpty = true;
}
public boolean iterate(IntWritable o) {
if (o != null) {
if (mEmpty) {
mMax = o.get();
mEmpty = false;
} else {
mMax = Math.max(mMax, o.get());
}
}
return true;
}
public IntWritable terminatePartial() {
return mEmpty ? null : new IntWritable(mMax);
}
public boolean merge(IntWritable o) {
return iterate(o);
}
public IntWritable terminate() {
return mEmpty ? null : new IntWritable(mMax);
}
}
/**
* MaxLongEvaluator.
*
*/
public static class MaxLongEvaluator implements UDAFEvaluator {
private long mMax;
private boolean mEmpty;
public MaxLongEvaluator() {
super();
init();
}
public void init() {
mMax = 0;
mEmpty = true;
}
public boolean iterate(LongWritable o) {
if (o != null) {
if (mEmpty) {
mMax = o.get();
mEmpty = false;
} else {
mMax = Math.max(mMax, o.get());
}
}
return true;
}
public LongWritable terminatePartial() {
return mEmpty ? null : new LongWritable(mMax);
}
public boolean merge(LongWritable o) {
return iterate(o);
}
public LongWritable terminate() {
return mEmpty ? null : new LongWritable(mMax);
}
}
/**
* MaxFloatEvaluator.
*
*/
public static class MaxFloatEvaluator implements UDAFEvaluator {
private float mMax;
private boolean mEmpty;
public MaxFloatEvaluator() {
super();
init();
}
public void init() {
mMax = 0;
mEmpty = true;
}
public boolean iterate(FloatWritable o) {
if (o != null) {
if (mEmpty) {
mMax = o.get();
mEmpty = false;
} else {
mMax = Math.max(mMax, o.get());
}
}
return true;
}
public FloatWritable terminatePartial() {
return mEmpty ? null : new FloatWritable(mMax);
}
public boolean merge(FloatWritable o) {
return iterate(o);
}
public FloatWritable terminate() {
return mEmpty ? null : new FloatWritable(mMax);
}
}
/**
* MaxDoubleEvaluator.
*
*/
public static class MaxDoubleEvaluator implements UDAFEvaluator {
private double mMax;
private boolean mEmpty;
public MaxDoubleEvaluator() {
super();
init();
}
public void init() {
mMax = 0;
mEmpty = true;
}
public boolean iterate(DoubleWritable o) {
if (o != null) {
if (mEmpty) {
mMax = o.get();
mEmpty = false;
} else {
mMax = Math.max(mMax, o.get());
}
}
return true;
}
public DoubleWritable terminatePartial() {
return mEmpty ? null : new DoubleWritable(mMax);
}
public boolean merge(DoubleWritable o) {
return iterate(o);
}
public DoubleWritable terminate() {
return mEmpty ? null : new DoubleWritable(mMax);
}
}
/**
* MaxStringEvaluator.
*
*/
public static class MaxStringEvaluator implements UDAFEvaluator {
private Text mMax;
private boolean mEmpty;
public MaxStringEvaluator() {
super();
init();
}
public void init() {
mMax = null;
mEmpty = true;
}
public boolean iterate(Text o) {
if (o != null) {
if (mEmpty) {
mMax = new Text(o);
mEmpty = false;
} else if (mMax.compareTo(o) < 0) {
mMax.set(o);
}
}
return true;
}
public Text terminatePartial() {
return mEmpty ? null : mMax;
}
public boolean merge(Text o) {
return iterate(o);
}
public Text terminate() {
return mEmpty ? null : mMax;
}
}
}