gpt4 book ai didi

python - 如何通过 Python 访问 Hive?

转载 作者:IT老高 更新时间:2023-10-28 21:33:56 26 4
gpt4 key购买 nike

https://cwiki.apache.org/confluence/display/Hive/HiveClient#HiveClient-Python似乎已经过时了。

当我将它添加到/etc/profile 时:

export PYTHONPATH=$PYTHONPATH:/usr/lib/hive/lib/py

然后我可以按照链接中列出的方式进行导入,除了 from hive import ThriftHive 实际上需要:

from hive_service import ThriftHive

接下来示例中的端口是 10000,当我尝试时导致程序挂起。默认的 Hive Thrift 端口是 9083,它停止了挂起。

所以我是这样设置的:

from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
try:
transport = TSocket.TSocket('<node-with-metastore>', 9083)
transport = TTransport.TBufferedTransport(transport)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = ThriftHive.Client(protocol)
transport.open()
client.execute("CREATE TABLE test(c1 int)")

transport.close()
except Thrift.TException, tx:
print '%s' % (tx.message)

我收到以下错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/hive/lib/py/hive_service/ThriftHive.py", line 68, in execute
self.recv_execute()
File "/usr/lib/hive/lib/py/hive_service/ThriftHive.py", line 84, in recv_execute
raise x
thrift.Thrift.TApplicationException: Invalid method name: 'execute'

但检查 ThriftHive.py 文件会发现该方法在 Client 类中执行。

如何使用 Python 访问 Hive?

最佳答案

我相信最简单的方法是使用 PyHive。

要安装,您需要以下库:

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

请注意,虽然您将库安装为 PyHive,但您将模块导入为 pyhive,全部小写。

如果您使用的是 Linux,则可能需要在运行上述程序之前单独安装 SASL。使用 apt-get 或 yum 或任何用于您的发行版的包管理器安装包 libsasl2-dev。对于 Windows,GNU.org 上有一些选项,您可以下载二进制安装程序。如果您已安装 xcode 开发人员工具(终端中的 xcode-select --install),则在 Mac 上 SASL 应该可用

安装后,你可以像这样连接到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)

关于python - 如何通过 Python 访问 Hive?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21370431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com