python - Python UDF 在 Apache Pig 中的使用

标签 python apache-pig udf

我是 Apache Pig 和 Python 的新手。 当我尝试在 Pig 中注册 Python 函数时,它给出了一些与 Jython 相关的错误。我的 python 脚本 udf1.py 将任何字符串转换为大写。

from pig_util import outputSchema

@outputSchema('output_field_name:chararray')
def charupper(x):
    b = x.upper()
    return b

c=charlower('bbbb')

print(c)

当我尝试在 Grunt shell 中以 Pig 本地模式注册时,它抛出以下错误

grunt> REGISTER '/home/cloudera/PycharmProjects/Project1/udf1.py' USING jython as pyudf                      
2015-04-06 22:31:45,792 [main] WARN  org.apache.hadoop.conf.Configuration - fs.default.name is deprecated. Instead, use fs.defaultFS
2015-04-06 22:31:45,793 [main] WARN  org.apache.hadoop.conf.Configuration - io.bytes.per.checksum is deprecated. Instead, use dfs.bytes-per-checksum
2015-04-06 22:31:45,836 [main] WARN  org.apache.pig.scripting.jython.JythonScriptEngine - pig.cmd.args.remainders is empty. This is not expected unless on testing.
2015-04-06 22:31:45,842 [main] WARN  org.apache.pig.scripting.jython.JythonScriptEngine - module file does not exist: encodings, /usr/lib/pig/lib/jython-standalone-2.5.2.jar/Lib/encodings/__init__.py
2015-04-06 22:31:45,842 [main] WARN  org.apache.pig.scripting.jython.JythonScriptEngine - module file does not exist: encodings.utf_8, /usr/lib/pig/lib/jython-standalone-2.5.2.jar/Lib/encodings/utf_8.py
2015-04-06 22:31:45,842 [main] WARN  org.apache.pig.scripting.jython.JythonScriptEngine - module file does not exist: types, /usr/lib/pig/lib/jython-standalone-2.5.2.jar/Lib/types.py
2015-04-06 22:31:45,842 [main] WARN  org.apache.pig.scripting.jython.JythonScriptEngine - module file does not exist: encodings.aliases, /usr/lib/pig/lib/jython-standalone-2.5.2.jar/Lib/encodings/aliases.py
2015-04-06 22:31:45,842 [main] WARN  org.apache.pig.scripting.jython.JythonScriptEngine - module file does not exist: codecs, /usr/lib/pig/lib/jython-standalone-2.5.2.jar/Lib/codecs.py
2015-04-06 22:31:46,026 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1121: Python Error. Traceback (most recent call last):
  File "/home/cloudera/PycharmProjects/Project1/udf1.py", line 3, in <module>
    from pig_util import outputSchema
ImportError: No module named pig_util

Details at logfile: /home/cloudera/pig_1428381449281.log

我已经导入了pig_util.py。我是否必须在 CDH 中安装任何与 jython 相关的东西?我无法知道错误。

Pig版本:Apache Pig版本0.11.0-cdh4.7.0

使用 PyCharm Community Edition 4.0.4 创建的 Python 脚本

Python 版本:Python 2.6.6(r266:84292,2014 年 1 月 22 日,09:42:36)

最佳答案

我也遇到了同样的问题。这是我所做的。

我从 here 下载了 pig_util.py 文件。然后我将 Pig_util.py 文件放在保存 python udf 的同一目录中,然后执行。这解决了我的导入错误。

注意:这与 jython 无关。

关于python - Python UDF 在 Apache Pig 中的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29484846/

相关文章:

python - 创建子图时 Matplotlib "dictionary changed size during iteration"错误

hadoop - Pig 不断尝试连接到作业历史服务器(但失败)

c - 如何从 Linux 下用 C 编写的 udf 返回 firebird 时间戳

scala - Spark UDF 空处理

excel - 防止 Excel 将 UDF 路径保存到公式单元格

python - 为什么Python的时间函数(如perf_counter_ns)解析会不一致?

python - Matplotlib:使用相同的图形绘制多个图形,而不重叠

python - 如何检查python脚本是否正在通过ssh远程调用

apache-pig - 如何在 Pig 中读取 Mahout 生成的序列文件

hadoop - 携带字段,或存储和加入?