You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pig.apache.org by "Rohini Palaniswamy (JIRA)" <ji...@apache.org> on 2016/05/11 23:46:13 UTC

[jira] [Comment Edited] (PIG-4883) MapKeyType of splitter was set wrongly in specific multiquery case

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

Rohini Palaniswamy edited comment on PIG-4883 at 5/11/16 11:45 PM:
-------------------------------------------------------------------

Can't we just do something like below to check if key type of splitter and splittee are same?
{code}
private boolean hasSameMapKeyType(MapReduceOper splitter, List<MapReduceOper> splittees) {
        Set<Byte> keyTypes = new HashSet<Byte>();
        for (MapReduceOper splittee : splittees) {
            keyTypes.add(splittee.mapKeyType);
        }
         boolean sameKeyType = keyTypes.size() == 1;
        if (sameKeyType && splitter.mapKeyType != DataType.UNKNOWN) {
            sameKeyType = splitter.mapKeyType == keyTypes.iterator().next().byteValue();
        }
        return sameKeyType;
    }
{code}

Can do 

return keyTypes.size() == 1 && splitter.mapKeyType == keyTypes.iterator().next().byteValue();


was (Author: rohini):
Can't we just do below code to check if key type of splitter and splittee are same?
{code}
private boolean hasSameMapKeyType(MapReduceOper splitter, List<MapReduceOper> splittees) {
        Set<Byte> keyTypes = new HashSet<Byte>();
        for (MapReduceOper splittee : splittees) {
            keyTypes.add(splittee.mapKeyType);
        }
        return keyTypes.size() == 1 && splitter.mapKeyType == keyTypes.iterator().next().byteValue();
    }
{code}

> MapKeyType of splitter was set wrongly in specific multiquery case
> ------------------------------------------------------------------
>
>                 Key: PIG-4883
>                 URL: https://issues.apache.org/jira/browse/PIG-4883
>             Project: Pig
>          Issue Type: Bug
>    Affects Versions: 0.15.0
>            Reporter: swlai
>            Assignee: liyunzhang_intel
>         Attachments: PIG-4883.patch
>
>
> The following code and data will raise an exception.
> However, if I remove any of the four "store"s, the code will be fine.
> {code:title=test.pig|borderStyle=solid}
> r = load 'test.txt' as (id: chararray, val: long);
> t1 = filter r by val >= 12 and val < 20;
> grpd = group t1 by val;
> t1_cnt = foreach grpd generate group as name, COUNT(t1) as value;
> t1_cnt = foreach t1_cnt generate (chararray)name, value;
> grpd = group t1 all;
> t1_cnt_total = foreach grpd generate 't1' as name, COUNT(t1) as value; 
> t2 = filter r by val >= 20 and val < 30;
> grpd = group t2 by val;
> t2_cnt = foreach grpd generate group as name, COUNT(t2) as value;
> --t2_cnt = foreach t2_cnt generate (chararray)name, value;
> grpd = group t2 all;
> t2_cnt_total = foreach grpd generate 't2' as name, COUNT(t2) as value;
> store t1_cnt  into 'outx/3';
> store t2_cnt  into 'outx/4';
> store t1_cnt_total into 'outx/5';
> store t2_cnt_total into 'outx/6';
> {code}
> and
> {code:title=test.txt|borderStyle=solid}
> c	12
> {code}
> will cause error:
> Caused by: java.lang.ClassCastException: org.apache.pig.data.BinSedesTuple cannot be cast to java.lang.Long
>         at org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POCast.getNextString(POCast.java:1167)
>         at org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator.getNext(PhysicalOperator.java:343)
>         ... 14 more
> I don't know why the code need to cast a BinSedesTuple to Long.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)