使用python客户端访问impala的操作方式


Posted in Python onMarch 28, 2020

因需要将impala仅仅作为数据源使用,而python有较好的数据分析函数,所以需要使用python客户端来获取impala中的表数据,这里的测试环境是:

操作系统:win7 (linux下也可行)

python 2.7

大数据环境:centos6.6

CDH版本:CDH5.4.1

impala 2.1.2 port:21050

1、安装Python package

pip install impyla

2、python客户端与impala交互

2.1 连接impala

>>> from impala.dbapi import connect
>>> conn = connect(host='my.impala.host', port=21050)
>>> cur = conn.cursor()

注意:这里要确保端口设置为HS2服务,而不是Beeswax服务。在Cloudera的管理集群中,HS2的默认端口是21050。 (Beeswax默认端口21000)

2.2 对impala执行SQL查询

>>> cur.execute('SHOW TABLES')
>>> cur.fetchall()
[('defect_code_dim',), ('gxzl_ca_materialinfo',), ('gxzl_cg_materialinfo',), ('gxzl_defect2',), ('gxzl_defects',), ('gxzl_defects_hd',), ('gxzl_fx_class',), ('gxzl_fx_leftmidright',), ('gxzl_fx_topandbot',), ('gxzl_jiejing_2cc_slab',), ('gxzl_kgx_drw',), ('gxzl_kgx_drw_tmp',), ('gxzl_rz_materialinfo',), ('gxzl_sdbase_defects',), ('gxzl_test',), ('new_table',), ('ouye_transactionlog',), ('ouye_userinfo',), ('simple_test',), ('t0',), ('t_100m_hdfs',), ('t_100m_test',), ('t_10m_hdfs',), ('target1',), ('target2',), ('target3',), ('test',), ('tianchi_mobile_recommend_train_full',), ('tianchi_mobile_recommend_train_item',), ('tianchi_mobile_recommend_train_user',), ('tianchi_mobile_recommend_train_useritem',)]
>>> cur.execute('SELECT * FROM test')
>>> cur.description
[('id', 'DOUBLE', None, None, None, None, None), ('name', 'STRING', None, None, None, None, None), ('value', 'STRING', None, None, None, None, None)]
>>> cur.fetchall()
[(1.0, 'tom', 'f'), (2.0, 'jerry', 't')]
>>>

注意:从服务器上获取数据会删除缓存,所以第二个.fetchall()返回一个空列表。

>>> cur.fetchall()
[(1.0, 'tom', 'f'), (2.0, 'jerry', 't')]
>>> cur.fetchall()
[]
>>>

2.3 遍历查询结果

>>> cur.execute('SELECT * FROM test')
>>> for row in cur:
  print row[1] == 1.0


False
False

注:python的角标是以0开始。以上仍是以缓存方式来获取数据。

如果你的数据集较小可以使用这种方式;如果你需要存储大量的数据集,你可以用CREATE TABLE AS SELECT语句把它写入HDFS。

2.4 将查询结果转化为python中的pandas DataFrames

除了遍历结果以外,还可以把结果转化成pandas的数据框对象,以便进行数据分析:

>>> from impala.dbapi import connect
>>> conn = connect(host='my.impala.host', port=21050)
>>> cur = conn.cursor()
>>> from impala.util import as_pandas
>>> cur.execute('SELECT * FROM test')
>>> df = as_pandas(cur)
>>> type(df)
<class 'pandas.core.frame.DataFrame'>
>>> df
  id  name value
0  1  tom   f
1  2 jerry   t
>>>

注:前提是python中安装了pandas,使用pip install pandas在线安装,安装过程中可能会提示:Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat). Get it from http://aka.ms/vcpython27

只要按照提示说的的去下载一个VC就可以了。这样就安装好了pandas。

以上这篇使用python客户端访问impala的操作方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中self原理实例分析
Apr 30 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
May 03 Python
Python通过命令开启http.server服务器的方法
Nov 04 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
Nov 20 Python
python中正则表达式的使用方法
Feb 25 Python
python微信公众号开发简单流程
Mar 23 Python
Python装饰器知识点补充
May 28 Python
使用python绘制3维正态分布图的方法
Dec 29 Python
Python2.7实现多进程下开发多线程示例
May 31 Python
Flask框架模板继承实现方法分析
Jul 31 Python
django中瀑布流写法实例代码
Oct 14 Python
python 读取更新中的log 或其它文本方式
Dec 24 Python
python 安装impala包步骤
Mar 28 #Python
django 链接多个数据库 并使用原生sql实现
Mar 28 #Python
Django多数据库配置及逆向生成model教程
Mar 28 #Python
后端开发使用pycharm的技巧(推荐)
Mar 27 #Python
如何基于python3和Vue实现AES数据加密
Mar 27 #Python
python小程序基于Jupyter实现天气查询的方法
Mar 27 #Python
Python实现的北京积分落户数据分析示例
Mar 27 #Python
You might like
初识laravel5
2015/03/02 PHP
PHP获取一段文本显示点阵宽度和高度的方法
2015/03/12 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
PHP序列化的四种实现方法与横向对比
2018/11/29 PHP
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
了不起的node.js读书笔记之node.js中的特性
2014/12/22 Javascript
浅谈javascript 归并方法
2015/01/21 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
jQuery序列化表单成对象的简单实现
2016/11/29 Javascript
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
详解vue-cli脚手架build目录中的dev-server.js配置文件
2017/11/24 Javascript
vue组件编写之todolist组件实例详解
2018/01/22 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
2019/08/09 Javascript
json解析大全 双引号、键值对不在一起的情况
2019/12/06 Javascript
vue实现顶部菜单栏
2020/11/08 Javascript
javascript实现时钟动画
2020/12/03 Javascript
[02:43]DOTA2英雄基础教程 半人马战行者
2014/01/13 DOTA
用python代码做configure文件
2014/07/20 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
2017/06/12 Python
python处理multipart/form-data的请求方法
2018/12/26 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
2019/06/21 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
解决Python安装cryptography报错问题
2020/09/03 Python
canvas绘制太极图的实现示例
2020/04/29 HTML / CSS
美国体育用品商店:Paragon Sports
2017/10/08 全球购物
英国地毯卖家:The Rug Seller
2019/07/18 全球购物
物业管理大学生个人的自我评价
2013/10/10 职场文书
餐饮业的创业计划书范文
2013/12/26 职场文书
2014年图书室工作总结
2014/12/09 职场文书
3招让你摆脱即兴讲话冷场尴尬
2019/08/08 职场文书
QT与javascript交互数据的实现
2021/05/26 Javascript