You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pig.apache.org by "Dmitriy V. Ryaboy (JIRA)" <ji...@apache.org> on 2010/04/05 18:22:29 UTC

[jira] Commented: (PIG-1354) UDFs for dynamic invocation of simple Java methods

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

Dmitriy V. Ryaboy commented on PIG-1354:
----------------------------------------

The attached patch provides generic UDFs for invoking functions that return one of the following Java classes: String, Integer, Long, Double, Float, or their primitive equivalents. The same set of classes can serve as arguments to said functions.

Static or non-static methods can be invoked (a non-static method is assumed to be invoked on the first element in the argument list).

The method signature is supplied using Pig Latin's DEFINE statement.

Usage looks like this:

{code}
 -- invoking a static method
 DEFINE StringToLong InvokeForLong('java.lang.Long.valueOf', 'String')
 longs = FOREACH strings GENERATE StringToLong(some_chararray);
 
 -- invoking a method on an object
 DEFINE StringConcat InvokeForString('java.lang.String.concat', 'String String', 'false')
 concatenations = FOREACH strings GENERATE StringConcat(str1, str2); 
 {code}

There is some overhead to using this technique vs writing a method-specific UDF wrapper. In my tests, the dynamic version runs about 1.3x-1.8x slower than a non-dynamic version for simple methods.

> UDFs for dynamic invocation of simple Java methods
> --------------------------------------------------
>
>                 Key: PIG-1354
>                 URL: https://issues.apache.org/jira/browse/PIG-1354
>             Project: Pig
>          Issue Type: New Feature
>    Affects Versions: 0.8.0
>            Reporter: Dmitriy V. Ryaboy
>            Assignee: Dmitriy V. Ryaboy
>             Fix For: 0.8.0
>
>         Attachments: PIG-1354.patch
>
>
> The need to create wrapper UDFs for simple Java functions creates unnecessary work for Pig users, slows down the development process, and produces a lot of trivial classes. We can use Java's reflection to allow invoking a number of methods on the fly, dynamically, by creating a generic UDF to accomplish this.

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