The first case will use Accumulator, so accumulate -> cleanup will be
called, but no exec. The second case will not use Accumulator, exec will
be called instead of accumulate -> cleanup.

Daniel

On 3/1/15, 7:21 PM, "Zhang, Liyun" <liyun.zh...@intel.com> wrote:

>Hi all:
>  I have a question about  TestAccumulator#testAccumBasic.
> The first pig script: (TestAccumulator line 151~154)
>  A = load '" + INPUT_FILE1 + "' as (id:int, fruit);
>  B = group A by id;
>  C = foreach B generate group,
>org.apache.pig.test.utils.AccumulatorBagCount(A);
>
>  It uses org.apache.pig.test.utils.AccumulatorBagCount, in
>org.apache.pig.test.utils.AccumulatorBagCount#exec
>  org.apache.pig.test.utils.AccumulatorBagCount#exec
>public Integer exec(Tuple tuple) throws IOException {
>        throw new IOException("exec() should not be called.");
>}
>My question:It should throw exception when script is excuted but why not
>throw exception?
>
>The second script: (TestAccumulator line 169~171)
>  A = load '" + INPUT_FILE1 + "' as (id:int, fruit);
> B = group A by id;
>  C = foreach B generate group,
>org.apache.pig.test.utils.AccumulatorBagCount(A),
>org.apache.pig.test.utils.BagCount(A);
> It uses , org.apache.pig.test.utils.AccumulatorBagCount and ),
>org.apache.pig.test.utils.BagCount.
>  The code checks whether if it throws exception, if not throw exception,
>the unit test fails.
>
>
>TestAccumulator#testAccumBasic
>@Test
>    public void testAccumBasic() throws IOException{
>    151    // test group by
>    152    pigServer.registerQuery("A = load '" + INPUT_FILE1 + "' as
>(id:int, fruit);");
>   153     pigServer.registerQuery("B = group A by id;");
>    154    pigServer.registerQuery("C = foreach B generate group,
>org.apache.pig.test.utils.AccumulatorBagCount(A);");
>
>        HashMap<Integer, Integer> expected = new HashMap<Integer,
>Integer>();
>        expected.put(100, 2);
>        expected.put(200, 1);
>        expected.put(300, 3);
>        expected.put(400, 1);
>
>        Iterator<Tuple> iter = pigServer.openIterator("C");
>
>        while(iter.hasNext()) {
>            Tuple t = iter.next();
>            assertEquals(expected.get((Integer)t.get(0)),
>(Integer)t.get(1));
>        }
>
>    169    pigServer.registerQuery("B = group A by id;");
>    170   pigServer.registerQuery("C = foreach B generate group,  " +
>                "org.apache.pig.test.utils.AccumulatorBagCount(A),
>org.apache.pig.test.utils.BagCount(A);");
>
>        try{
>            iter = pigServer.openIterator("C");
>
>            while(iter.hasNext()) {
>                Tuple t = iter.next();
>                assertEquals(expected.get((Integer)t.get(0)),
>(Integer)t.get(1));
>            }
>            fail("accumulator should not be called.");
>        }catch(IOException e) {
>            // should throw exception from AccumulatorBagCount.
>        }
>
>        // test cogroup
>        pigServer.registerQuery("A = load '" + INPUT_FILE1 + "' as
>(id:int, fruit);");
>        pigServer.registerQuery("B = load '" + INPUT_FILE1 + "' as
>(id:int, fruit);");
>        pigServer.registerQuery("C = cogroup A by id, B by id;");
>        pigServer.registerQuery("D = foreach C generate group,  " +
>                "org.apache.pig.test.utils.AccumulatorBagCount(A),
>org.apache.pig.test.utils.AccumulatorBagCount(B);");
>
>        HashMap<Integer, String> expected2 = new HashMap<Integer,
>String>();
>        expected2.put(100, "2,2");
>        expected2.put(200, "1,1");
>        expected2.put(300, "3,3");
>        expected2.put(400, "1,1");
>
>        iter = pigServer.openIterator("D");
>
>        while(iter.hasNext()) {
>            Tuple t = iter.next();
>            assertEquals(expected2.get((Integer)t.get(0)),
>t.get(1).toString()+","+t.get(2).toString());
>        }
>    }
>
>   Can anyone help me solving my question?
>
>Best regards
>Zhang,Liyun
>

Reply via email to