[ 
https://issues.apache.org/jira/browse/PIG-2021?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13031114#comment-13031114
 ] 

Vivek Padmanabhan commented on PIG-2021:
----------------------------------------

Hi Xuefu,
 Extremely sorry about that.I was just trying to remove the dependencies.Please 
check whether the below is a valid case;

{code}
register mymapudf.jar;
A = load 'temp' as ( s, m, l );
B = foreach A generate *, org.vivek.udfs.mToMapUDF((chararray) s) as mapout;
C = foreach B {
  urlpath = (chararray) mapout#'k1';
  lc_urlpath = org.vivek.udfs.LOWER((chararray) urlpath);
  generate urlpath,lc_urlpath;
};
{code}


Source for org.vivek.udfs.mToMapUDF
{code}
package org.vivek.udfs;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.DataType;
import org.apache.pig.data.Tuple;
import org.apache.pig.impl.logicalLayer.schema.Schema;
public class mToMapUDF  extends EvalFunc<Map> {
        public Map<String, Object> exec(Tuple arg0) throws IOException {
                Map <String,Object> myMapTResult =  new HashMap<String, 
Object>();
                myMapTResult.put("k1", "SomeString");
                myMapTResult.put("k3", "SomeOtherString");
                return myMapTResult;
        }
        public Schema outputSchema(Schema input) {
                return new Schema(new 
Schema.FieldSchema("mapout",DataType.MAP));
        }
}
{code}



Source for org.vivek.udfs.LOWER
{code}
package org.vivek.udfs;
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
import org.apache.pig.data.DataType;
import org.apache.pig.impl.logicalLayer.schema.Schema;
import org.apache.pig.impl.logicalLayer.FrontendException;
import org.apache.pig.FuncSpec;
public class LOWER extends EvalFunc<String> {
    public String exec(Tuple input) throws IOException {
        if (input == null || input.size() == 0)
            return null;
        try {
            String str = (String)input.get(0);
            return str.toLowerCase();
        } catch(Exception e){
            return null;
        }
    }
    public Schema outputSchema(Schema input) {
        return new Schema(new 
Schema.FieldSchema(getSchemaName(this.getClass().getName().toLowerCase(), 
input), DataType.CHARARRAY));
    }
     public List<FuncSpec> getArgToFuncMapping() throws FrontendException {
        List<FuncSpec> funcList = new ArrayList<FuncSpec>();
        funcList.add(new FuncSpec(this.getClass().getName(), new Schema(new 
Schema.FieldSchema(null, DataType.CHARARRAY))));
        return funcList;
     }
}
{code}



> Parser error while referring a map nested foreach
> -------------------------------------------------
>
>                 Key: PIG-2021
>                 URL: https://issues.apache.org/jira/browse/PIG-2021
>             Project: Pig
>          Issue Type: Bug
>    Affects Versions: 0.9.0
>            Reporter: Vivek Padmanabhan
>            Assignee: Xuefu Zhang
>             Fix For: 0.9.0
>
>
> The below script is throwing parser errors
> {code}
> register string.jar;
> A = load 'test1'  using MapLoader() as ( s, m, l );                       
> B = foreach A generate *, string.URLPARSE((chararray) s#'url') as parsedurl;
> C = foreach B {
>   urlpath = (chararray) parsedurl#'path';
>   lc_urlpath = string.TOLOWERCASE((chararray) urlpath);
>   generate *;
> };
> {code}
> Error message;
> | Failed to generate logical plan.
> |Nested exception: org.apache.pig.impl.logicalLayer.FrontendException: ERROR 
> 2225: Projection with nothing to reference!
> PIG-2002 reports a similar issue, but when i tried with the patch of PIG-2002 
> i was getting the below exception;
>  ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: <file repro.pig, line 
> 11, column 33>  mismatched input '(' expecting SEMI_COLON

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to