如何报告Python UDF(Pig)的进度?

时间:2013-08-13 15:20:08

标签: python apache-pig

Here是Java UDF的说明,但我想从Python UDF中执行此操作。

1 个答案:

答案 0 :(得分:1)

您可以尝试获取PigProgressable的实例:

<强> myudf.py

from time import sleep
from org.apache.pig.tools.pigstats import PigStatusReporter

@outputSchema('i:int')
def tester(foo):
    # Sleeps for a total of 3 minutes

    e = PigStatusReporter.getInstance()
    e.progress()
    sleep(60)
    e.progress()
    sleep(60)
    e.progress()
    sleep(60)
    e.progress()

    return 1

<强> myscript.pig

-- Waits for 1.6 minutes before killing the job
SET mapred.task.timeout 100000 ;

register 'myudf.py' using jython as myudf ;
A = LOAD '$input' AS (foo:chararray) ;
B = FOREACH A GENERATE myudf.tester(foo) ;

此示例仅在e.progress()实际发送心跳时才会成功,否则会超时。这个测试在猪0.10上传给我。