Python使用impala包连接hive报错怎么解决

本篇内容介绍了“Python使用impala包连接hive报错怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

成都创新互联公司是专业的神池网站建设公司,神池接单;提供网站制作、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行神池网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

由于是内网测试环境,没有外网,自然就先在本地用conda创建python虚拟环境,安装好所有需要的包再移过去。

一顿操作猛如虎,各种坑都填好了,然后发现impala.util中的as_pandas起不动,原因是其依赖的pandas起不动,归根结底是pandas依赖的numpy import报错:

ImportError: Something is wrong with the numpy installation. 
While importing we detected an older version of numpy in 
['/.../anconda3/lib/site-packages/numpy']. 
One method of fixing this is to repeatedly uninstall numpy 
until none is found, then reinstall this version.
 

定位问题是卡在numpy源码中的__init__.py这一段:

if not (hasattr(multiarray, '_multiarray_umath') and
        hasattr(umath, '_multiarray_umath')):
    import sys
    path = sys.modules['numpy'].__path__
    msg = ("Something is wrong with the numpy installation. "
        "While importing we detected an older version of "
        "numpy in {}. One method of fixing this is to repeatedly uninstall "
        "numpy until none is found, then reinstall this version.")
    raise ImportError(msg.format(path))
 

奇怪的是导入version是正常的,显示目前的numpy版本是1.19.4

from numpy.version import version as __version__
print(__version__)
 

报错信息中的建议是先完整卸载numpy,然后重装。网上看遍了解决办法,也都是如此。

秉承着匠人程序员精神,一定要追根溯源,另辟蹊径解决问题!

对不起,调子起高了,其实是内网环境太不方便了。

既然报错信息说了有older version的numpy,想办法把它清理干净不就行了吗?

先来看看到底之前装了什么老版本的numpyPython使用impala包连接hive报错怎么解决

这就奇怪了,.../lib/site-packages目录下1.14.3版的手动删除过了,怎么还有呢?看样子还有残存,翻一下...\Anaconda3\conda-metaPython使用impala包连接hive报错怎么解决

果然发现1.14.3的信息,delete这几项再运行一下conda list numpy,显示只有最新版的version了,666~

Python使用impala包连接hive报错怎么解决  

再次import numpy,依然是最初的报错。。。难道还有older version余孽?

Python使用impala包连接hive报错怎么解决  

解决问题还是要回归本源,咱们看一下import的原理:

对于python来说,所有被加载到内存的模块都是放在sys.modules里面,所以执行import时会首先去该列表中查询是否已添加。如果已经在sys.modules中,那就简单了,只需要将该module的name添加到我们正在调用该module的本地空间中。如果还没有放在sys.modules中,就需要在sys.path所有路径的目录中去按顺序查找该模块的文件,这些文件一般后缀为".py"、".pyo"、".pyc"、".pyd"、".dll",找到这些模块后就可以将这些模块添加到sys.modules中,再将module name导入到本地。

所以很有可能是在导入numpy时新老版本在sys.modules中撞车了?

先查看一下modules里都有什么:

import sys
sys.modules
 

Python使用impala包连接hive报错怎么解决

元凶终于找到了

赶紧跑去..\Anaconda3\Lib\site-packages\numpy\core__pycache 目录下把这些pyd文件删除!!!

Python使用impala包连接hive报错怎么解决  
Python使用impala包连接hive报错怎么解决    

“Python使用impala包连接hive报错怎么解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


网站栏目:Python使用impala包连接hive报错怎么解决
URL地址:http://scjbc.cn/article/gjjogc.html

其他资讯