python - 在 Windows 上导入 Impyla 库时出错

标签 python windows impyla

我在 Windows 上使用 impyla 库时遇到问题

我安装了impyla库

pip 安装 impyla

在python代码中导入impyla库时出现错误

from impala.dbapi import connect  # error occured
from impala.util import as_pandas
conn = connect(host='10.xx.xx.xx', database='xx_xx', port=21050)`

Traceback (most recent call last): ...

File "D:/test/test.py", line 14, in from impala.dbapi import connect

File "C:\Anaconda3\lib\site-packages\impala\dbapi.py", line 28, in import impala.hiveserver2 as hs2

File "C:\Anaconda3\lib\site-packages\impala\hiveserver2.py", line 32, in from impala._thrift_api import (

File "C:\Anaconda3\lib\site-packages\impala_thrift_api.py", line 73, in include_dirs=[thrift_dir])

File "C:\Anaconda3\lib\site-packages\thriftpy\parser__init__.py", line 30, in load include_dir=include_dir)

File "C:\Anaconda3\lib\site-packages\thriftpy\parser\parser.py", line 496, in parse url_scheme))

thriftpy.parser.exc.ThriftParserError: ThriftPy does not support generating module with path in protocol 'c'

当我尝试打印 include_dir 时,它是

D:/test\thrift

我根本无法导入库

帮助我

最佳答案

我在 thriftpy 上遇到了同样的问题,windows 上的问题是绝对路径就像 C:\foo\bar.thrift

但是,thrift 库解析文件的方式,它检测到 C: 就好像它是一个类似 http:https:

解决方法非常简单,您只需使用像 path[2:]

这样的切片从路径中去除前两个字符

调用thriftpy.load时切片或者在库文件中

File "C:\Anaconda3\lib\site-packages\thriftpy\parser__init__.py", line 30

path = "C:\foo\bar.thrift"
thrift.load(path[2:], module_name, include_dirs=include_dirs,
                   include_dir=include_dir)

您可以更深入地进行更改,我已经在 github page 上作为补丁提交了相同的更改。 ...也许它会被纳入下一个版本的节俭。

File "C:\Anaconda3\lib\site-packages\thriftpy\parser\parser.py", line 488

-    if url_scheme == '':
+    if len(url_scheme) <= 1:

我在拉取请求中说明了此更改有效的理由。如果它已合并,那么您不必担心在更新库时再次进行相同的更改。如果不是,则再次删除这两个字符。

更新:

  • Thriftpy 版本 1:解析器修复现在位于第 547 行:elif len(url_scheme) <= 1:

  • Thriftpy 版本 2:修复已合并。

关于python - 在 Windows 上导入 Impyla 库时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39220102/

相关文章:

python - 如何使用 Pandas groupby 获取最大组数,使用字母顺序打破任何联系

python - 谷歌.protobuf.message.DecodeError : Error parsing message with type 'tensorflow.GraphDef'

c++ - 使用 c 或 c++ 运行 c 的控制台时禁用键盘键

c# - 来自 C# 代码的 CMD 命令不起作用 (Windows)

python - 如何使用 impyla 连接到 impala 或使用 pyhive 连接到 hive?

Python Dataframe 在一行中将多列求和/减去多列

c - 如何使用非阻塞方式检查stdin是否为空

hadoop - 查询HiveServer2时Impyla从org.apache.hadoop.hive.ql.exec.mr.MapRedTask返回代码1

python - Numpy 鸿沟和 Python 鸿沟之间的区别?