我在HDFS中有一些数据,我需要使用python访问该数据,有人能告诉我如何使用python从hive访问数据吗?
答案 0 :(得分:11)
要安装,您需要这些库:
pip install sasl
pip install thrift
pip install thrift-sasl
pip install PyHive
如果您使用的是Linux,则可能需要在运行上述内容之前单独安装SASL。使用libsasl2-dev
或apt-get
或任何软件包管理器安装软件包yum
。对于Windows,有一些选项on GNU.org。在Mac上,如果您安装了xcode开发人员工具(xcode-select --install
)
安装完成后,您可以执行这样的配置单元查询:
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)
答案 1 :(得分:6)
您可以使用hive库从python访问配置单元,因为您要导入配置单元类 来自hive import ThriftHive
在示例
下面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)
答案 2 :(得分: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,那就足够了。
答案 3 :(得分:-1)
我尝试了几乎所有可能的解决方案,以从远程Windows服务器连接到Hive。似乎没有任何作用。 PyHive和pyhs2使用SASL,并且Windows不支持SASL。通过cygwin安装它也没有帮助。 唯一适用于我的解决方案是pyodbc。您只需要在系统上配置DSN。