前些日子有想用python从SparkThriftServer上取数的需求,与其他同事共同研究一番之后终于有了结果。
其实很简单,只需要一个叫做impyla的库即可实现。不过在安装的时候需要注意,thrift_sasl的版本须是文档中所说的0.2.1,而不能是最新版本,否则会报错。
安装好之后,只需要
from impala.dbapi import connect
sql = 'SELECT ......'
conn = connect(host='xx.xx.xx.xx', port=xxxxx, auth_mechanism='PLAIN', database='DATABASE')
cursor = conn.cursor()
cursor.execute(sql)
result = cursor.fetchall()
即可;
(P.S.: 这里import的时候的名字是impala,但pip的时候需要是impyla)
同时,还有一点非常好的是,impyla对python的数据结构非常友好,在得到结果后如需要将其转成pandas的DataFrame话非常方便。