如何在 hive 上使用 python UDF 中的外部库?



我想使用Python UDF转换一个Hive表(hdfs现货实例(,为此我需要一个外部库"user-agent"。不使用外部库的我的 udf 工作正常。但是当我想使用它时,我无法让事情正常工作。

我尝试使用下面给出的代码本身安装库。

import sys
import subprocess
import pip
import os

sys.stdout = open(os.devnull, 'w+')
pip.main(['install', '--user', 'pyyaml'])
pip.main(['install', '--user', 'ua-parser'])
pip.main(['install', '--user', 'user-agents'])
sys.stdout = sys.__stdout__

在此之后我尝试了这个

import user_agents

但是 udf 崩溃并出现异常"找不到模块"。我还尝试通过代码检查以下路径:

/usr/local/lib/python2.7/site-packages
/usr/local/lib64/python2.7/site-packages

但是那里没有user_agents模块。关于如何做到这一点以使事情正常工作的任何帮助?真的很感激。谢谢!

我想出了一条出路。对于那些正在解决相同的UDF问题但尚未成功的人,可以尝试此解决方案并检查它是否也适合他们。

对于外部库,请执行以下步骤:

第 1 步:强制 pip 通过代码本身将外部库安装到 UDF 的当前工作目录中。

import sys
import os
import pip
sys.stdout = open(os.devnull, 'w+')
pip.main(['install', 'user-agents', '-t', os.getcwd(), '--ignore-installed'])
sys.stdout = sys.__stdout__

第 2 步:更新系统路径

sys.path.append(os.getcwd())

步骤3:现在导入库:)

from user_agents import parse 

就是这样。请检查并确认这也适合您。

最新更新