使用python客户端访问impala的操作方式
因需要将impala仅仅作为数据源使用,而python有较好的数据分析函数,所以需要使用python客户端来获取impala中的表数据,这里的测试环境是:
操作系统:win7(linux下也可行)
python2.7
大数据环境:centos6.6
CDH版本:CDH5.4.1
impala2.1.2port:21050
1、安装Pythonpackage
pipinstallimpyla
2、python客户端与impala交互
2.1连接impala
>>>fromimpala.dbapiimportconnect >>>conn=connect(host='my.impala.host',port=21050) >>>cur=conn.cursor()
注意:这里要确保端口设置为HS2服务,而不是Beeswax服务。在Cloudera的管理集群中,HS2的默认端口是21050。(Beeswax默认端口21000)
2.2对impala执行SQL查询
>>>cur.execute('SHOWTABLES') >>>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*FROMtest') >>>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*FROMtest') >>>forrowincur: printrow[1]==1.0 False False
注:python的角标是以0开始。以上仍是以缓存方式来获取数据。
如果你的数据集较小可以使用这种方式;如果你需要存储大量的数据集,你可以用CREATETABLEASSELECT语句把它写入HDFS。
2.4将查询结果转化为python中的pandasDataFrames
除了遍历结果以外,还可以把结果转化成pandas的数据框对象,以便进行数据分析:
>>>fromimpala.dbapiimportconnect >>>conn=connect(host='my.impala.host',port=21050) >>>cur=conn.cursor() >>>fromimpala.utilimportas_pandas >>>cur.execute('SELECT*FROMtest') >>>df=as_pandas(cur) >>>type(df)>>>df idnamevalue 01tomf 12jerryt >>>
注:前提是python中安装了pandas,使用pipinstallpandas在线安装,安装过程中可能会提示:MicrosoftVisualC++9.0isrequired(Unabletofindvcvarsall.bat).Getitfromhttp://aka.ms/vcpython27
只要按照提示说的的去下载一个VC就可以了。这样就安装好了pandas。
以上这篇使用python客户端访问impala的操作方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。