HDFSにいくつかのデータがあります。Pythonを使用してそのデータにアクセスする必要があります。Pythonを使用してHiveからデータにアクセスする方法を教えてもらえますか?
Hiveライブラリを使用してPythonからHiveにアクセスできます。そのため、HiveからHiveクラスをインポートします。importThriftHive
例の下
import sys
from Hive import ThriftHive
from Hive.ttypes import HiveServerException
from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
try:
transport = TSocket.TSocket('localhost', 10000)
transport = TTransport.TBufferedTransport(transport)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = ThriftHive.Client(protocol)
transport.open()
client.execute("CREATE TABLE r(a STRING, b INT, c DOUBLE)")
client.execute("LOAD TABLE LOCAL INPATH '/path' INTO TABLE r")
client.execute("SELECT * FROM r")
while (1):
row = client.fetchOne()
if (row == None):
break
print row
client.execute("SELECT * FROM r")
print client.fetchAll()
transport.close()
except Thrift.TException, tx:
print '%s' % (tx.message)
インストールするには、次のライブラリが必要です。
pip install sasl
pip install thrift
pip install thrift-sasl
pip install PyHive
Linuxを使用している場合は、上記を実行する前にSASLを個別にインストールする必要がある場合があります。パッケージをインストールしますlibsasl2-dev
using apt-get
またはyum
または任意のパッケージマネージャー。 Windowsの場合、いくつかのオプションがあります GNU.org上 。 Macでは、xcode開発者ツールをインストールしている場合はSASLを使用できます(xcode-select --install
)
インストール後、次のようにHiveクエリを実行できます。
from pyhive import Hive
conn = Hive.Connection(Host="YOUR_Hive_Host", port=PORT, username="YOU")
これでHive接続ができたので、使用方法を選択できます。単純なクエリを実行できます。
cursor = conn.cursor()
cursor.execute("SELECT cool_stuff FROM Hive_table")
for result in cursor.fetchall():
use_result(result)
...または接続を使用してPandasデータフレーム:
import pandas as pd
df = pd.read_sql("SELECT cool_stuff FROM Hive_table", conn)
Windowsを使用している場合のはるかに簡単なソリューションは、pyodbc
を使用します。
import pyodbc
import pandas as pd
# connect odbc to data source name
conn = pyodbc.connect("DSN=<your_dsn>", autocommit=True)
# read data into dataframe
Hive_df = pd.read_sql("SELECT * FROM <table_name>", conn)
ODBCドライバーとDSNがあれば、必要なのはそれだけです。