使用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中staticmethod和classmethod的区别(详解)
Oct 24 Python
Python3.7实现中控考勤机自动连接
Aug 28 Python
python中对数据进行各种排序的方法
Jul 02 Python
python 缺失值处理的方法(Imputation)
Jul 02 Python
python导包的几种方法(自定义包的生成以及导入详解)
Jul 15 Python
pip安装python库的方法总结
Aug 02 Python
docker django无法访问redis容器的解决方法
Aug 21 Python
浅析PEP572: 海象运算符
Oct 15 Python
TensorBoard 计算图的查看方式
Feb 15 Python
Python内置函数locals和globals对比
Apr 28 Python
python IP地址转整数
Nov 20 Python
pyspark对Mysql数据库进行读写的实现
Dec 30 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
用Socket发送电子邮件
2006/10/09 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
PHP资源管理框架Assetic简介
2014/06/12 PHP
Windows下的PHP安装pear教程
2014/10/24 PHP
PDO实现学生管理系统
2020/03/21 PHP
基于jquery打造的百分比动态色彩条插件
2012/09/19 Javascript
jQuery中setTimeout的几种使用方法小结
2013/04/07 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
node.js中的fs.utimesSync方法使用说明
2014/12/15 Javascript
js正则匹配出所有图片及图片地址src的方法
2015/06/08 Javascript
javascript常用的方法分享
2015/07/01 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
2015/11/11 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
微信小程序实现人脸识别
2018/05/25 Javascript
node后端服务保活的实现
2019/11/10 Javascript
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
2020/07/10 Javascript
python算法学习之基数排序实例
2013/12/18 Python
Python写的Socks5协议代理服务器
2014/08/06 Python
将Python中的数据存储到系统本地的简单方法
2015/04/11 Python
Python3读取UTF-8文件及统计文件行数的方法
2015/05/22 Python
Python实现统计单词出现的个数
2015/05/28 Python
Python实现保证只能运行一个脚本实例
2015/06/24 Python
Python中标准模块importlib详解
2017/04/16 Python
python 一个figure上显示多个图像的实例
2019/07/08 Python
对Django中内置的User模型实例详解
2019/08/16 Python
利用pandas合并多个excel的方法示例
2019/10/10 Python
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
英国医生在线预约:Top Doctors
2019/10/30 全球购物
2013年研究生毕业感言
2014/02/06 职场文书
大四学生找工作的自荐信
2014/03/27 职场文书
拔河比赛口号
2014/06/10 职场文书
小学数学课题方案
2014/06/15 职场文书
逃课打麻将检讨书
2014/10/05 职场文书
企业财务经理岗位职责
2015/04/08 职场文书
MySQL事务的ACID特性以及并发问题方案
2022/07/15 MySQL