2015-12-15 4 views
0

У меня есть UDF Python, который подключается к HBase с помощью Happybase. Если я запускаю код из Python 2.7, он отлично работает.«Нет модуля с именем happybase» при работе с PIG

Однако, когда я называю Python UDF из Свиньи 0.15.0 Я получаю следующее сообщение об ошибке:

ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1121: Python Error. Traceback (most recent call last): import happybase ImportError: No module named happybase

В моей Свинье сценарии я регистрация моего Python скрипт (pigtest.py), как это:

REGISTER 'pigtest.py' using jython as myfuncs; 

Я попытался установить путь Happybase в моем сценарии Python следующим образом, но это не делает разницы:

import sys 
sys.path.append('/usr/local/lib/python2.7/dist-packages/happybase') 
import happybase 

Я также попытался добавить «/usr/local/lib/python2.7/dist-packages/happybase» в JYTHON_PATH в файле .bashrc (я на Ubuntu), но при этом появляется такая же ошибка.

Мне кажется, что мне нужно установить путь Happybase куда-нибудь, но я не могу понять, где.

+0

Когда вы регистрируете UDF, я считаю, что путь, на который он смотрит, - HDFS. Поэтому, если happybase находится в вашей локальной файловой системе, он не будет работать так, как вы его настроили. Это также объясняет, почему pigtest.py работает самостоятельно - переместите его на другую машину без счастливой базы, и она не будет работать снова –

+0

Я вижу, так есть способ заставить Happybase работать в этом сценарии? Кроме того, моя «pigtest.py» находится в локальной файловой системе (той же папке, что и скрипт Pig), а не в HDFS, но она ее находит или это другое? –

+0

Поскольку вы «REGISTER» pigtest.py'', это будет искать файлы локально, но загружает их в HDFS за кулисами. Вы можете неявно поставить 'pigtest.py' на HDFS, затем сделать что-то вроде' REGISTER 'hdfs: /// tmp/pigtest.py''. Что касается проблемы Happybase, я должен был бы изучить ее дальше, так как раньше я не использовал Python UDF. –

ответ

1

Я смог решить это с помощью списка рассылки пользователей Jython. Вам нужно указать родительский каталог папки Happybase, а не путь к самому файлу Happybase, как я делал, выполнив одно из следующих действий:

Добавить расположение к sys.path в скрипте Python:

import sys 
sys.path.append('/usr/local/lib/python2.7/dist-packages') 
import happybase 

ИЛИ

Добавить местоположение в качестве переменной окружения, JYTHONPATH (не JYTHON_PATH!):

export JYTHONPATH = $JYTHONPATH:/usr/local/lib/python2.7/dist-packages