每当python as hive udf出现异常失败时,我都会尝试从程序中完全退出。
举个例子:
从hivesampletable中选择transform(id,name),使用'd:\python27\python.exe streaming.py'作为(id string,name string,count integer);
# streaming.py
import sys
from datetime import datetime
try:
for line in sys.stdin.readlines():
fields = line.strip().split('\t')
fields.append(len(name))
print "\t".join(fields)
except:
#I want program to break/clean exit with out printing (writing back) to table
赞赏的想法
2条答案
按热度按时间vecaoik11#
如果您本质上想“吞下”异常,那么我建议
except
阻止您显式调用sys.exit(0)
,它将退出程序并(从shell级别)指示程序“正常”。e、 g.你最终会得到一个真正干净的出口,即使是shell(例如bash)也会认为是“成功”。
注意:如果您想在不打印任何内容的情况下退出,但让shell知道出错了,请将非零错误代码传递给
exit
.对op评论的回应:
嗯,我没想到,既然你明确地接受了这个异常。。。
下一步可能是打印出异常是什么,正如在另一个答案中所建议的那样,然后从那里开始,这取决于异常是什么。
另一个可能的原因是我认为python脚本与
TRANSFORM
声明,所以这可能是促成这一问题的原因。另外,您正在引用
name
在没有初始化的情况下(这可能是这里的例外--NameError: name 'name' is not defined
).5uzkadbs2#
pass语句将允许您忽略错误并将控制流返回到程序。