Использование Python UDF в Apache Pig

Я новичок в Apache Pig и Python. Когда я пытаюсь ЗАРЕГИСТРИРОВАТЬ функцию Python в Pig, она выдает ошибку, связанную с 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)

Когда я пытаюсь зарегистрироваться в локальном режиме Pig в оболочке Grunt, он выдает следующую ошибку

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. Нужно ли мне устанавливать что-либо, связанное с jython, на моем CDH? Я не мог узнать об ошибке.

Версия Pig: Apache Pig версия 0.11.0-cdh4.7.0

Скрипт Python, созданный с использованием PyCharm Community Edition 4.0.4

Версия Python: Python 2.6.6 (r266: 84292, 22 января 2014 г., 09:42:36)


person Green    schedule 07.04.2015    source источник
comment
Недостаточно импортировать pig_util.py в pig. вам нужно указать путь к файлу utils   -  person Mzf    schedule 08.04.2015
comment
вам также необходимо импортировать jython   -  person Krishna Kalyan    schedule 12.04.2015


Ответы (1)


Я была такая же проблема. Вот что я сделал.

Я загрузил pig_util.py файл с здесь . Затем я поместил файл Pig_util.py в тот же каталог, где был сохранен мой python udf, а затем выполнил его. Это решило для меня ошибку импорта.

Примечание. Это не имеет ничего общего с jython.

person Hemaa mathavan    schedule 26.07.2016
comment
Я скопировал файл из $PIG_HOME/src/python/streaming, где $ PIG_HOME - это место, где установлена ​​свинья. - person flow2k; 17.02.2019