Hi Richard,
I tried that before but it did not work. It seems like I missed something
but I don't know the details.
Here is a my script for testing:
#!/usr/bin/python
> # need to explicitly import the Pig class
from org.apache.pig.scripting import Pig
> output = 'outfile'
> #Pig.fs('-rmr /user/hanadmin/out*')
> p = Pig.compile("""
records = LOAD '/user/hanadmin/DUAL.TXT' USING PigStorage() AS
> (input_line:chararray);
r1 = FOREACH records GENERATE LOWER(records.input_line);
STORE r1 INTO '$out';
""")
> bs = p.bind({'out' : output})
r = bs.runSingle()
> iter = r.result('r1').iterator()
while iter.hasNext():
t = iter.next()
I got an error like the following:
Backend error message
---------------------
org.apache.pig.backend.executionengine.ExecException: ERROR 0: Scalar has
> more than one row in the output. 1st : (abcD), 2nd :(Abcd)
at
> org.apache.pig.impl.builtin.ReadScalars.exec(ReadScalars.java:111)
at
> org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POUserFunc.getNext(POUserFunc.java:203)
at
> org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POUserFunc.getNext(POUserFunc.java:299)
at
> org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator.getNext(PhysicalOperator.java:323)
at
> org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POUserFunc.processInput(POUserFunc.java:161)
at
> org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POUserFunc.getNext(POUserFunc.java:186)
at
> org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POUserFunc.getNext(POUserFunc.java:299)
at
> org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator.getNext(PhysicalOperator.java:323)
at
> org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POForEach.processPlan(POForEach.java:335)
at
> org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POForEach.getNext(POForEach.java:287)
at
> org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigMapBase.runPipeline(PigMapBase.java:260)
at
> org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigMapBase.map(PigMapBase.java:255)
at
> org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigMapBase.map(PigMapBase.java:58)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:639)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:315)
at org.apache.hadoop.mapred.Child$4.run(Child.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at
> org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1063)
at org.apache.hadoop.mapred.Child.main(Child.java:211)
> Error before Pig is launched
----------------------------
ERROR 2088: Unable to get results for: hdfs://
> dev1.daum.net/user/hanadmin/outfile:org.apache.pig.builtin.PigStorage
> Traceback (most recent call last):
File "<iostream>", line 19, in <module>
at
> org.apache.pig.tools.pigstats.OutputStats.iterator(OutputStats.java:156)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
> org.apache.pig.backend.executionengine.ExecException:
> org.apache.pig.backend.executionengine.ExecException: ERROR 2088: Unable to
> get results for: hdfs://
> dev1.daum.net/user/hanadmin/outfile:org.apache.pig.builtin.PigStorage
================================================================================
Thanks.
- Youngwoo
2011년 1월 19일 오전 3:55, Richard Ding <[email protected]>님의 말:
> The method you’re looking for is PigStats.result(String alias) which
> returns a OutputStats object.
>
> Here is an example:
>
> R = Pig.compile(...).bind(...).runSingle()
> iter = R.result(“G”).iterator()
> while iter.hasNext():
> t = iter.next()
> ....
>
> On 1/17/11 9:34 PM, "김영우" <[email protected]> wrote:
>
> Hi All,
>
> I'm looking into embedding pig latin in a host language using pig trunk. so
> far, basic features work fine for me. but I need to know how can I get
> result tuples from the stored bag.
> I need to apply some processing to each tuple from result bag. In wiki
> http://wiki.apache.org/pig/TuringCompletePig , It seems 'getResults()'
> method works like what I want. but I got an error like "returned PigStats
> has no attribute 'getResults()' ..."
>
> Any advice would be appreciated.
>
> - Youngwoo
>
>