使用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解析网页源代码中的115网盘链接实例
Sep 30 Python
Python发送以整个文件夹的内容为附件的邮件的教程
May 06 Python
Python的SQLalchemy模块连接与操作MySQL的基础示例
Jul 11 Python
python中安装Scrapy模块依赖包汇总
Jul 02 Python
使用paramiko远程执行命令、下发文件的实例
Oct 01 Python
Django框架封装外部函数示例
May 28 Python
Python读取YAML文件过程详解
Dec 30 Python
python基于celery实现异步任务周期任务定时任务
Dec 30 Python
Pytorch Tensor 输出为txt和mat格式方式
Jan 03 Python
Python常用模块sys,os,time,random功能与用法实例分析
Jan 07 Python
opencv-python的RGB与BGR互转方式
Jun 02 Python
python中可以声明变量类型吗
Jun 18 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
PHP初学者最感迷茫的问题小结
2010/03/27 PHP
PHP 写文本日志实现代码
2010/05/18 PHP
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
简单的php缓存类分享     php缓存机制
2014/01/22 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
PHP convert_cyr_string()函数讲解
2019/02/13 PHP
laravel 5.3 单用户登录简单实现方法
2019/10/14 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
学习面向对象之面向对象的术语
2010/11/30 Javascript
jQuery筛选器children()案例详解(图文)
2013/02/17 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
2016/09/13 Javascript
Vue项目webpack打包部署到服务器的实例详解
2017/07/17 Javascript
使用JQuery实现图片轮播效果的实例(推荐)
2017/10/24 jQuery
vue 组件的封装之基于axios的ajax请求方法
2018/08/11 Javascript
微信小程序云开发如何使用云函数生成二维码
2019/05/18 Javascript
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
2020/10/09 Javascript
Vue-router中hash模式与history模式的区别详解
2020/12/15 Vue.js
跟老齐学Python之玩转字符串(1)
2014/09/14 Python
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
Python中用于计算对数的log()方法
2015/05/15 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
2018/07/26 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
pytorch+lstm实现的pos示例
2020/01/14 Python
python第三方库学习笔记
2020/02/07 Python
销售团队口号大全
2014/06/06 职场文书
护理专业求职信
2014/06/15 职场文书
搞笑车尾标语
2014/06/23 职场文书
教师党员整改措施
2014/10/24 职场文书
2014年第四季度入党积极分子思想汇报(十八届四中全会)
2014/11/03 职场文书
护士求职自荐信
2015/03/25 职场文书
2015个人年度工作总结范文
2015/05/28 职场文书
创业计划书之养殖业
2019/10/11 职场文书
JS 基本概念详细介绍
2021/10/16 Javascript