Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * 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.pig.builtin;
 
 
This method should never be used directly, use MIN.
 
 public class StringMin extends EvalFunc<Stringimplements AlgebraicAccumulator<String> {
 
     @Override
     public String exec(Tuple inputthrows IOException {
         try {
             return min(input);
         } catch (ExecException ee) {
             throw ee;
         }
     }
 
     public String getInitial() {
         return Initial.class.getName();
     }
 
     public String getIntermed() {
         return Intermediate.class.getName();
     }
 
     public String getFinal() {
         return Final.class.getName();
     }
 
     static public class Initial extends EvalFunc<Tuple> {
         private static TupleFactory tfact = TupleFactory.getInstance();
 
         @Override
         public Tuple exec(Tuple inputthrows IOException {
             try {
                 // input is a bag with one tuple containing
                 // the column we are trying to min on
                 DataBag bg = (DataBaginput.get(0);
                 String s = null;
                 if(bg.iterator().hasNext()) {
                     Tuple tp = bg.iterator().next();
                     s = (String)(tp.get(0));
                 }
                 return .newTuple(s);
             } catch (ExecException ee) {
                 throw ee;
             } catch (Exception e) {
                 int errCode = 2106;
                 String msg = "Error while computing min in " + this.getClass().getSimpleName();
                 throw new ExecException(msgerrCode.e);           
             }
         }
     }
 
     static public class Intermediate extends EvalFunc<Tuple> {
         private static TupleFactory tfact = TupleFactory.getInstance();
 
         @Override
         public Tuple exec(Tuple inputthrows IOException {
             try {
                 return .newTuple(min(input));
             } catch (ExecException ee) {
                 throw ee;
             } catch (Exception e) {
                 int errCode = 2106;
                 String msg = "Error while computing min in " + this.getClass().getSimpleName();
                 throw new ExecException(msgerrCode.e);           
             }
        }
    }
    static public class Final extends EvalFunc<String> {
        @Override
        public String exec(Tuple inputthrows IOException {
            try {
                return min(input);
            } catch (ExecException ee) {
                throw ee;
            } catch (Exception e) {
                int errCode = 2106;
                String msg = "Error while computing min in " + this.getClass().getSimpleName();
                throw new ExecException(msgerrCode.e);           
            }
        }
    }
    static protected String min(Tuple inputthrows ExecException {
        DataBag values = (DataBag)input.get(0);
        
        // if we were handed an empty bag, return NULL
        // this is in compliance with SQL standard
        if(values.size() == 0) {
            return null;
        }
        Iterator<Tupleit = values.iterator();
        // assign first non null element as min to begin with
        String curMin = null;
        while(curMin == null && it.hasNext()) {
            Tuple t = it.next();
            curMin = (String)(t.get(0));
        }
        
        for (; it.hasNext();) {
            Tuple t = it.next();
            try {
                String s = (String)(t.get(0));
                if (s == nullcontinue;
                ifs.compareTo(curMin) < 0) {
                    curMin = s;
                }
                
            } catch (RuntimeException exp) {
                int errCode = 2103;
                String msg = "Problem while computing min of strings.";
                throw new ExecException(msgerrCode.exp);
            }
        }
    
        return curMin;
    }
    @Override
    public Schema outputSchema(Schema input) {
        return new Schema(new Schema.FieldSchema(null.)); 
    }
    
    /* accumulator interface */
    private String intermediateMin = null;
    
    @Override
    public void accumulate(Tuple bthrows IOException {
        try {
            String curMin = min(b);
            if (curMin == null) {
                return;
            }
            // check if it lexicographically follows curMax
            if ( == null || .compareTo(curMin) < 0) {
                 = curMin;
            }            
        } catch (ExecException ee) {
            throw ee;
        } catch (Exception e) {
            int errCode = 2106;
            String msg = "Error while computing max in " + this.getClass().getSimpleName();
            throw new ExecException(msgerrCode.e);           
        }
    }
    @Override
    public void cleanup() {
         = null;
    }
    @Override
    public String getValue() {
        return ;
    }
New to GrepCode? Check out our FAQ X