我在 HDFS 中有一些数据,我需要使用 python 访问这些数据,谁能告诉我如何使用 python 从 hive 访问数据?
问问题
29967 次
3 回答
12
要安装,您将需要这些库:
pip install sasl
pip install thrift
pip install thrift-sasl
pip install PyHive
如果您使用的是 Linux,则可能需要在运行上述程序之前单独安装 SASL。libsasl2-dev
使用apt-get
或yum
或任何包管理器安装包。对于 Windows ,GNU.org 上有一些选项。xcode-select --install
如果您已经安装了 xcode 开发者工具 ( )在 Mac 上 SASL 应该可用
安装后,您可以执行如下配置单元查询:
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)
于 2015-11-02T14:25:00.440 回答
6
您可以使用 hive 库从 python 访问 hive,因为您想从 hive import ThriftHive 导入 hive 类
示例下方
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)
于 2013-07-18T12:00:18.327 回答
0
如果您在 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,这就是您所需要的。
于 2018-12-18T18:17:13.963 回答