使用Python访问Hive数据

时间:2013-07-18 11:37:05

标签: python hive

我在HDFS中有一些数据,我需要使用python访问该数据,有人能告诉我如何使用python从hive访问数据吗?

4 个答案:

答案 0 :(得分:11)

要安装,您需要这些库:

pip install sasl
pip install thrift
pip install thrift-sasl
pip install PyHive

如果您使用的是Linux,则可能需要在运行上述内容之前单独安装SASL。使用libsasl2-devapt-get或任何软件包管理器安装软件包yum。对于Windows,有一些选项on GNU.org。在Mac上,如果您安装了xcode开发人员工具(xcode-select --install

,则应该可以使用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)

答案 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。