Here是 Java UDF 的说明,但我想从 Python UDF 执行此操作。
最佳答案
您可以尝试获取 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()
实际发送心跳时,此示例才会成功,否则会超时。我在 pig 0.10 上通过了这个测试。
关于python - 如何报告 Python UDF(针对 Pig)的进度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18213016/