使用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 lambda和Python def区别分析
Nov 30 Python
Python脚本实现下载合并SAE日志
Feb 10 Python
使用Python的web.py框架实现类似Django的ORM查询的教程
May 02 Python
Python Sqlite3以字典形式返回查询结果的实现方法
Oct 03 Python
一篇文章快速了解Python的GIL
Jan 12 Python
Python异常对代码运行性能的影响实例解析
Feb 08 Python
python的常用模块之collections模块详解
Dec 06 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
Sep 06 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
Feb 27 Python
Python中三维坐标空间绘制的实现
Sep 22 Python
python unichr函数知识点总结
Dec 16 Python
Python中OpenCV实现简单车牌字符切割
Jun 11 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递归的三种常用方式
2019/02/28 PHP
常用参考资料(手册)下载或者链接
2006/07/22 Javascript
解决jquery submit()提交表单提示:f[s] is not a function
2013/01/23 Javascript
火狐textarea输入法的bug的触发及解决
2013/07/24 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
邮箱下拉自动填充选择示例代码附图
2014/04/03 Javascript
ext中store.load跟store.reload的区别示例介绍
2014/06/17 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
2016/02/23 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
2016/08/19 Javascript
详解jQuery选择器
2016/12/21 Javascript
node.js操作mongodb简单示例分享
2017/05/25 Javascript
解决JS外部文件中文注释出现乱码问题
2017/07/09 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
vue页面跳转后返回原页面初始位置方法
2018/02/11 Javascript
webpack-url-loader 解决项目中图片打包路径问题
2019/02/15 Javascript
js核心基础之构造函数constructor用法实例分析
2019/05/11 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
jQuery实现手风琴特效
2021/01/11 jQuery
Python入门及进阶笔记 Python 内置函数小结
2014/08/09 Python
python异常和文件处理机制详解
2016/07/19 Python
python进程管理工具supervisor的安装与使用教程
2017/09/05 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
2018/05/08 Python
python多线程与多进程及其区别详解
2019/08/08 Python
在Python中利用pickle保存变量的实例
2019/12/30 Python
python编写一个会算账的脚本的示例代码
2020/06/02 Python
Python3开发环境搭建详细教程
2020/06/18 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
信息专业本科生个人的自我评价
2013/10/28 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
英语导游词
2015/02/13 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
大学运动会加油稿
2015/07/22 职场文书
ajax请求前端跨域问题原因及解决方案
2021/10/16 Javascript
postgresql之greenplum字符串去重拼接方式
2023/05/08 PostgreSQL