使用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装饰器使用方法实例
Nov 21 Python
Python使用random和tertools模块解一些经典概率问题
Jan 28 Python
在IIS服务器上以CGI方式运行Python脚本的教程
Apr 25 Python
在Python中处理日期和时间的基本知识点整理汇总
May 22 Python
Python实现删除文件中含“指定内容”的行示例
Jun 09 Python
python 3.0 模拟用户登录功能并实现三次错误锁定
Nov 01 Python
Tensorflow中的placeholder和feed_dict的使用
Jul 09 Python
Python内置random模块生成随机数的方法
May 31 Python
Python中函数参数匹配模型详解
Jun 09 Python
python在新的图片窗口显示图片(图像)的方法
Jul 11 Python
python正则-re的用法详解
Jul 28 Python
pycharm安装及如何导入numpy
Apr 03 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
法兰绒滤网冲泡
2021/03/03 冲泡冲煮
在项目中寻找代码的坏命名
2012/07/14 PHP
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
php微信开发之批量生成带参数的二维码
2016/06/26 PHP
laravel 执行迁移回滚示例
2019/10/23 PHP
用jquery设置按钮的disabled属性的实现代码
2010/11/28 Javascript
JS文本框不能输入空格验证方法
2013/03/19 Javascript
利用div+jquery自定义滚动条样式的2种方法
2013/07/18 Javascript
详解js闭包
2014/09/02 Javascript
vue 实现 tomato timer(蕃茄钟)实例讲解
2017/07/24 Javascript
React-Native中props具体使用详解
2017/09/04 Javascript
layui select动态添加option的实例
2018/03/07 Javascript
安装vue-cli的简易过程
2018/05/22 Javascript
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
[20:39]DOTA2-DPC中国联赛 正赛开幕式 1月18日
2021/03/11 DOTA
Python中的True,False条件判断实例分析
2015/01/12 Python
在Python的Django框架中编写错误提示页面
2015/07/22 Python
使用python 爬虫抓站的一些技巧总结
2018/01/10 Python
1 行 Python 代码快速实现 FTP 服务器
2018/01/25 Python
Python线性拟合实现函数与用法示例
2018/12/13 Python
用python拟合等角螺线的实现示例
2019/12/27 Python
Python多线程thread及模块使用实例
2020/04/28 Python
切尔西足球俱乐部官方网上商店:Chelsea FC
2019/06/17 全球购物
什么是java序列化,如何实现java序列化
2012/11/14 面试题
聊城大学毕业生自荐书
2014/02/01 职场文书
高等教育学专业自荐书
2014/06/17 职场文书
交通事故一次性赔偿协议书范本
2014/11/02 职场文书
2014年优质护理服务工作总结
2014/11/14 职场文书
纪检干部学习心得体会
2016/01/23 职场文书
技术入股协议书
2016/03/22 职场文书
大学生入党自我鉴定范文
2019/06/21 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书
使用css样式设计一个简单的html登陆界面的实现
2021/03/30 HTML / CSS
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
2021/04/06 Python
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android
docker 制作mysql镜像并自动安装
2022/05/20 Servers