使用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列表操作使用示例分享
Feb 21 Python
Python制作数据导入导出工具
Jul 31 Python
python编程线性回归代码示例
Dec 07 Python
numpy 进行数组拼接,分别在行和列上合并的实例
May 08 Python
Python实现合并两个有序链表的方法示例
Jan 31 Python
Python实现删除排序数组中重复项的两种方法示例
Jan 31 Python
python3实现斐波那契数列(4种方法)
Jul 15 Python
关于pytorch处理类别不平衡的问题
Dec 31 Python
python中count函数简单的实例讲解
Feb 06 Python
Python 安装 virturalenv 虚拟环境的教程详解
Feb 21 Python
Windows下Anaconda安装、换源与更新的方法
Apr 17 Python
如何基于Django实现上下文章跳转
Sep 16 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
很实用的一个完整email发送程序
2006/10/09 PHP
php购物网站支付paypal使用方法
2010/11/28 PHP
php 学习资料零碎东西
2010/12/04 PHP
php 定义404页面的实现代码
2012/11/19 PHP
抛弃 PHP 代价太高
2016/04/26 PHP
php从数据库中读取特定的行(实例)
2017/06/02 PHP
PHP chunk_split()函数讲解
2019/02/12 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
2019/04/15 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
2019/10/21 PHP
JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码)
2013/11/13 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
JQuery实现可直接编辑的表格
2015/04/16 Javascript
js判断手机号运营商的方法
2015/10/23 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
2016/01/04 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
2016/12/14 Javascript
javascript 注释代码的几种方法总结
2017/01/04 Javascript
JS获取字符对应的ASCII码实例
2017/09/10 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
2018/03/19 Javascript
jquery的 filter()方法使用教程
2018/03/22 jQuery
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
原生js无缝轮播插件使用详解
2020/03/09 Javascript
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
python 回调函数和回调方法的实现分析
2016/03/23 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
Python中easy_install 和 pip 的安装及使用
2017/06/05 Python
Python实现网站表单提交和模板
2019/01/15 Python
澳大利亚儿童和婴儿产品在线商店:Lime Tree Kids
2017/10/05 全球购物
EVE LOM英国官网:全世界最好的洁面膏
2017/10/30 全球购物
如何在Cookie里面保存Unicode和国际化字符
2013/05/25 面试题
运动会入场词60字
2014/02/15 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
表彰大会新闻稿
2015/07/17 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书
asyncio异步编程之Task对象详解
2022/03/13 Python