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

时间:2017-07-29 06:24:07

标签: python hadoop hive user-defined-functions hiveql

我想使用Python UDF转换hive表(hdfs spot实例),我需要一个外部库“user-agents”。我没有使用外部库的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模块。有关如何使其工作的任何帮助?真的很感激。谢谢!

1 个答案:

答案 0 :(得分:2)

我想出了一条出路。对于那些正在解决这个相同的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

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

步骤3:现在导入库:)

from user_agents import parse 

那就是它。请检查并确认它对你有用。