前言
之前在讀hive數據的時候,經常使用讀hdfs parquet文件的方法,雖然封裝函數一樣,調用起來也方便,但是總覺得不得勁,既然我需要的是hive數據,為何不直接讀hive呢?剛好今天又遇到了這個問題,就花了兩個小時,研究了不同的方法,mark一下,以便查閱。好了,進入正題,下面列出了兩種方法,但大體上差不多,可根據需要選擇。另外,還看到使用 impala 操作hive的方法,沒有詳細研究,有空再看看。
pyhive
在網上查了一下,使用比較多的是 pyhs2 和 pyhive,看了下pyhs2已經好多年沒有更新了,轉而研究pyhive,操作步驟如下:
-
conda?install sasl? ? ##網上很多資料都是使用pip安裝,但是大多會遇到下面的錯誤信息,強烈建議使用conda安裝。這里提示一下,不僅僅是這個包,其他包遇到pip不能安裝的時候,也使用conda試試,因為pip有些包需要gcc編譯等,對環境要求比較高。
ERROR: Command errored out with exit status 1: anaconda3/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-_iihdxsa/sasl/setup.py'"'"'; __file__='"'"'/tmp/pip-install-_iihdxsa/sasl/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-kukgvvno/install-record.txt --single-version-externally-managed --compile Check the logs for full command output.
- pip install thrift-sasl
- pip install PyHive
測試程序如下:
from pyhive import hive
import pandas as pd
cursor = hive.connect(host=IP,port=10000, auth="LDAP", database="default", username="test", password="test").cursor()
cursor.execute('select * from test_table')
data = cursor.fetchall()
columns = [col[0].split('.')[-1] for col in cursor.description]
data = pd.DataFrame(data=data, columns=columns)
print(data.shape)
因為我的hive是采用LDAP認證的,所以需要提供用戶名、密碼,如果不是這種方式,參考官方demo稍微改一下就可以了。另外,大家可能看到使用?hive.Connection 的方式連接hive的,其實這種方法和 hive.connect 一樣,看一下源碼就明白了,后者調用了前者。
pandas
采用pandas讀取hive是偶然間在網上看到的,測試后發現挺好用的,畢竟pandas好用。首先看一下自己是否有 SQLAlchemy 這個包,如果沒有執行下面命令安裝:
pip install SQLAlchemy
測試程序如下:
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine('hive://username:passwd@IP:10000/default?auth=LDAP')
data = pd.read_sql("SELECT * FROM test_table",con=engine)
print(data.shape)
上述程序同樣使用了LDAP認證,pandas的源碼中同樣提供了使用demo,看一下就明白了。SQLAlchemy 的使用請看參考資料鏈接。
參考資料
https://docs.sqlalchemy.org/en/13/
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
