12

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

4

3 回答 3

12

要安装,您将需要这些库:

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

如果您使用的是 Linux,则可能需要在运行上述程序之前单独安装 SASL。libsasl2-dev使用apt-getyum或任何包管理器安装包。对于 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 回答