Python - 使用Subprocess的Hive命令 - 空结果

时间:2016-03-23 04:55:28

标签: python hive subprocess

我正在使用子进程在python中运行hive命令,但结果是空的。如果我从hive CLI运行相同的命令,我会得到结果。

 query = "set hive.cli.print.header=true;use mydb;describe table1;"  
 process = subprocess.Popen( ["ssh", "hadoop" , "hive", "-e", "%r" % query], stdout = subprocess.PIPE, stderr = subprocess.PIPE )  
 data = [line.split('\t') for line in process.stdout]  
 cols = list(itertools.chain.from_iterable(data[:1]))  
 df = pd.DataFrame(data[1:], columns = cols)  
 print "==>"+df+"<----"  

它返回空数据帧。

请帮我解决这个问题

1 个答案:

答案 0 :(得分:1)

myfile=open("query_result.tsv", 'w')
p=subprocess.Popen("your query",
        shell=True,
        stdout=myfile,stderr=subprocess.PIPE)
stdout,stderr = p.communicate()
if p.returncode != 0:
    print stderr
    sys.exit(1)

myfile是一个tsv文件,您可以使用pandas.read_csv(sep =&#39; \ t&#39;)并设置sep =&#39; \ t&#39; ,您可能需要查找pandas api以找到有关read_csv()的更多用法。

你应该在17.1.2中查找关于Popen Object的subprocess api。它会给你一个关于stdout = PIPE的警告。 https://docs.python.org/2/library/subprocess.html#frequently-used-arguments