Python作为Hive UDF - 在异常时清除退出

时间:2016-04-20 05:09:26

标签: python exception hive udf

当我的python作为Hive UDF因异常而失败时,我试图从程序中彻底退出。
这是一个例子:

  

SELECT TRANSFORM(id,name)USING   ' D:\ Python27 \ python.exe streaming.py' AS(id字符串,   name string,count integer)FROM hivesampletable;

#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 个答案:

答案 0 :(得分:1)

如果你基本上想要吞下"例外,那么我建议你在except块中明确调用sys.exit(0),它将退出程序并指示(从shell级别)程序是" OK"

e.g。你最终会得到一个真正干净的出口,即使是一个外壳,例如bash,将会看到"成功"。

注意:如果您想退出而不打印任何内容但允许shell知道出现问题,请将非零错误代码传递给exit

对OP评论的回应:

嗯,我不会指望,因为你明确地吞下了这个例外...

下一步可能是打印出异常是什么,正如另一个答案中所建议的那样,并从那里开始,具体取决于异常是什么。

可能有所贡献的另一件事是我不认为你的Python脚本符合你的TRANSFORM声明,因此可能会导致这个问题。

另外,如果没有初始化name,那么你引用NameError: name 'name' is not defined(这可能是例外 - // Closes the Responsive Menu on Menu Item Click $('.navbar-collapse ul li a').click(function() { if ($(this).attr('class') != 'dropdown-toggle active' && $(this).attr('class') != 'dropdown-toggle') { $('.navbar-toggle:visible').click(); } }); )。

答案 1 :(得分:1)

使用pass语句可以忽略错误并将控制流程返回到程序中。

var foo = [];
            $('.box22').each(function(x,v){
            var temp =[];   
             $(v).find('select  option').each(function() {
                 var selected = $(this).attr("selected");
                 var selectedvalue = $(this).attr("value");
                if(selected = "selected")
                {
                    temp.push(selectedvalue);
                }
             });
            foo[x] = temp;
                 console.log(temp);
            });