[
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.