001/** 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 019package org.apache.hadoop.mapreduce.lib.aggregate; 020 021import java.util.ArrayList; 022 023import org.apache.hadoop.classification.InterfaceAudience; 024import org.apache.hadoop.classification.InterfaceStability; 025 026/** 027 * This class implements a value aggregator that maintain the maximum of 028 * a sequence of long values. 029 * 030 */ 031@InterfaceAudience.Public 032@InterfaceStability.Stable 033public class LongValueMax implements ValueAggregator<String> { 034 035 long maxVal = Long.MIN_VALUE; 036 037 /** 038 * the default constructor 039 * 040 */ 041 public LongValueMax() { 042 reset(); 043 } 044 045 /** 046 * add a value to the aggregator 047 * 048 * @param val 049 * an object whose string representation represents a long value. 050 * 051 */ 052 public void addNextValue(Object val) { 053 long newVal = Long.parseLong(val.toString()); 054 if (this.maxVal < newVal) { 055 this.maxVal = newVal; 056 } 057 } 058 059 /** 060 * add a value to the aggregator 061 * 062 * @param newVal 063 * a long value. 064 * 065 */ 066 public void addNextValue(long newVal) { 067 if (this.maxVal < newVal) { 068 this.maxVal = newVal; 069 }; 070 } 071 072 /** 073 * @return the aggregated value 074 */ 075 public long getVal() { 076 return this.maxVal; 077 } 078 079 /** 080 * @return the string representation of the aggregated value 081 */ 082 public String getReport() { 083 return ""+maxVal; 084 } 085 086 /** 087 * reset the aggregator 088 */ 089 public void reset() { 090 maxVal = Long.MIN_VALUE; 091 } 092 093 /** 094 * @return return an array of one element. The element is a string 095 * representation of the aggregated value. The return value is 096 * expected to be used by the a combiner. 097 */ 098 public ArrayList<String> getCombinerOutput() { 099 ArrayList<String> retv = new ArrayList<String>(1);; 100 retv.add("" + maxVal); 101 return retv; 102 } 103}