参考文献:
Hive中使用Python实现Transform时遇到Broken pipe错误排查
https://www.cnblogs.com/Joe-T/p/4643452.html
python中利用transform读取hive表:
hive语句:
select transform (x,y,z)
using 'python test.py'
as
(a,b,c,d,e)
from
table;
python脚本:
import sys
for line in sys.stdin:
line=line.strip()
x,y,z=line.split(':')
a=x
b=y
c=z
d=x+y+z
print '\t'.join([a,b,c,str(d)])
并将python脚本上传为udf文件
遇到的问题:
运行hive语句
hive中报错:
java.io.IOException: Broken pipe
原本是以为hive中调用python脚本udf写的不对
后来发现是因为读取的数据中有badcase,或者格式不对,输出时print的应该是string格式的
因此在python脚本中加入 try except, 并确定输出格式为str
import sys
for line in sys.stdin:
try:
line=line.strip()
x,y,z=line.split(':')
a=x
b=y
c=z
d=x+y+z
print '\t'.join([str(a),str(b),str(c),str(d)])
expect:
pass
问题解决