【问题标题】:How to use external library in python UDF on hive?如何在 hive 上的 python UDF 中使用外部库?
【发布时间】:2017-07-29 06:24:06
【问题描述】:

我想使用 Python UDF 转换配置单元表(hdfs 现场实例),为此我需要一个外部库“用户代理”。我不使用外部库的 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 模块。有关如何使事情正常进行的任何帮助?真的很感激。谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

    步骤一:强制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 
    

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

    【讨论】:

      猜你喜欢
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多