python连接hive报错:TypeError: can‘t concat str to bytes
目录
或者直接使用 pip install pyhive[hive] 安装。需要先 pip uninstall pyhive。
一、完整报错
Traceback (most recent call last):
File "D:/Gitlab/my_world/hive2csv.py", line 18, in <module>
conn = hive.Connection(host=host, port=port, username=username, password=password, database=database, auth=auth)
File "D:\Anaconda3\lib\site-packages\pyhive\hive.py", line 269, in __init__
self._transport.open()
File "D:\Anaconda3\lib\site-packages\thrift_sasl\__init__.py", line 82, in open
self._send_message(self.START, chosen_mech)
File "D:\Anaconda3\lib\site-packages\thrift_sasl\__init__.py", line 103, in _send_message
self._trans.write(header + body)
TypeError: can't concat str to bytes
二、解决
2.1、进入D:\Anaconda3\lib\site-packages\thrift_sasl\__init__.py文件
2.2、添加如下代码到第101行之前
if (type(body) is str):
body = body.encode()
然后就可以运行了。
三、 其他报错
报错:AttributeError: 'TSaslClientTransport' object has no attribute 'readAll'
解决:pip install thrift_sasl==0.3.0
其他报错可以参考文章:python连接hive
四、impala方式连接hive
4.1、依赖包
pip install six bit_array thrift thrift_sasl sqlalchemy impyla -i https://pypi.tuna.tsinghua.edu.cn/simple
4.2、代码
from impala.dbapi import connect
conn = connect(host=host,port=port,user=username,password=password,auth_mechanism=auth,database=database)
def get_sql_result(sql):
# 鎵ц鏌ヨ骞惰幏鍙栫粨鏋? cursor = conn.cursor()
cursor.execute(sql)
result = cursor.fetchall()
columns = [desc[0] for desc in cursor.description]
return result,columns
if __name__ == '__main__':
hive_sql = 'show databases'
result,columns = get_sql_result(hive_sql)
df = pd.DataFrame(result,columns=columns)