[ 
https://issues.apache.org/jira/browse/PIG-1434?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Olga Natkovich updated PIG-1434:
--------------------------------

    Release Note: 
PIG-1434 adds functionality that allows to cast elements of a single-tuple 
relation into a scalar value. The primary use case for this is using values of 
global aggregates in the follow up computations. For instance,

 

A = load 'mydata' as (userid, clicks);

B = group A all;

C = foreach B genertate SUM(A.clicks) as total;

D = foreach A generate userid,  clicks/(double)C.total;

dump D;

 

This example allows computing the % of the clicks belonging to a particular 
user. Note that if the SUM as not given a name, a position can be used as well 
(userid,  clicks/(double)C.$0); Also, note that if explicit cast is not used an 
implict cast would be inserted according to regular Pig rules.

 

The relation can be used in any place where an expression of the type would 
make sense. This includes FOREACH, FILTER, and SPLIT.

 

A multi field tuple can also be used:

 

A = load 'mydata' as (userid, clicks);

B = group A all;

C = foreach B genertate SUM(A.clicks) as total, COUNT(A) as cnt;

D = FILTER A by clicks > C.total/3

E = foreach D generate userid,  clicks/(double)C.total, cnt;

Dump E;

 

If a relation contains more than single tuple, a runtime error is generated: 
"Scalar has more than one row in the output"



> Allow casting relations to scalars
> ----------------------------------
>
>                 Key: PIG-1434
>                 URL: https://issues.apache.org/jira/browse/PIG-1434
>             Project: Pig
>          Issue Type: Improvement
>            Reporter: Olga Natkovich
>            Assignee: Aniket Mokashi
>             Fix For: 0.8.0
>
>         Attachments: scalarImpl.patch, ScalarImpl1.patch, ScalarImpl5.patch, 
> ScalarImplFinale.patch, ScalarImplFinale1.patch, ScalarImplFinaleRebase.patch
>
>
> This jira is to implement a simplified version of the functionality described 
> in https://issues.apache.org/jira/browse/PIG-801.
> The proposal is to allow casting relations to scalar types in foreach.
> Example:
> A = load 'data' as (x, y, z);
> B = group A all;
> C = foreach B generate COUNT(A);
> .....
> X = ....
> Y = foreach X generate $1/(long) C;
> Couple of additional comments:
> (1) You can only cast relations including a single value or an error will be 
> reported
> (2) Name resolution is needed since relation X might have field named C in 
> which case that field takes precedence.
> (3) Y will look for C closest to it.
> Implementation thoughts:
> The idea is to store C into a file and then convert it into scalar via a UDF. 
> I believe we already have a UDF that Ben Reed contributed for this purpose. 
> Most of the work would be to update the logical plan to
> (1) Store C
> (2) convert the cast to the UDF

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

Reply via email to