hadoop-pig-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Shravan Matthur Narayanamurthy (JIRA)" <j...@apache.org>
Subject [jira] Commented: (PIG-255) Calling non default constructor of Final class from Main class in UDF
Date Wed, 18 Jun 2008 16:38:45 GMT

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

Shravan Matthur Narayanamurthy commented on PIG-255:
----------------------------------------------------

It was our mistake. We had not intended to change resolveClassName. We will be uploading a
new patch. 

{noformat}
public Class getClassForAlias(String alias) throws IOException{
        String className, funcSpec = null;
        if (definedFunctions != null) {
            funcSpec = definedFunctions.get(alias);
        }
        if (funcSpec != null) {
            className = getClassNameFromSpec(funcSpec);
        }else{
            className = alias;
        }
        return resolveClassName(className);
    }
{noformat}

The fix we are proposing is here. When funcSpec==null, we set className=alias. But in our
case when the final function uses the arg version , the alias is not just a class name but
a funcSpec. So the if block should be 
{noformat}
 if (funcSpec != null) {
            className = getClassNameFromSpec(funcSpec);
        }else{
            className = getClassNameFromSpec(alias);
        }
{noformat}

Will be submitting a new patch with this.

> Calling non default constructor of Final class from Main class in UDF
> ---------------------------------------------------------------------
>
>                 Key: PIG-255
>                 URL: https://issues.apache.org/jira/browse/PIG-255
>             Project: Pig
>          Issue Type: Improvement
>            Reporter: Ajay Garg
>            Priority: Minor
>         Attachments: cons.patch, test.patch
>
>
> Pig supports the use of define to call a non default constructor. Making it work across
Algebraic functions is not possible with the current code. The problem is once the func is
defined to use a non default constructor which takes in names of the variables, we have no
way of transmitting this information from the main class to the final class. We tried passing
the func spec through the call to getFinal(). That is, What ever names we get in the main
class we store it and when the getFinal method is called, instead of just passing the name
of the Final class we attach the string args received by the main class to the name to construct
a func spec. For ex. if define COV = Covariance('Population', 'Height'); Then we would have
the "Population' & 'Height' stored in the main class. A call to getFinal would return
Covariance$Final("Population", "Height") instead of just Covariance$Final. I guess this is
the right way to go. However, pig has a problem with this. The resolveClassName method doesn't
think of its args as specs and assumes them to be just names. So in createJar, when the func
spec, Covariance$Final("Population", "Height") is being resolved it fails. I think this is
an issue with pig and we need to resolve it by clipping the args before doing a resolveClassName.


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message