За Apache Pig, как да напиша UDF за зареждане в python

Искам да напиша функция за зареждане на Python UDF за Apache Pig, така че да мога да я използвам по следния начин в скрипт на Pig:

register 'myudfs.py' using jython as myfuncs;
A = load 'data' using myfuncs.myLoader() as line;

Документацията на Pig предоставя някои подробности за писане на UDF за зареждане в Java, но не в Python. Успях да внедря доста полезни функции Eval с Python, но не можах да намеря нищо за това как да напиша функции за зареждане на този език.

Тъй като вече внедрих няколко Eval UDF в Python, бих искал да се придържам към този език за всички мои UDF.


person halloleo    schedule 19.08.2013    source източник
comment
Току-що намерих този отговор: Според @Ian_Stevens, LoadFuncs за Pig не може да бъде написан на Python . Това би обяснило защо документацията е толкова мълчалива за това. Но дали е вярно?   -  person halloleo    schedule 19.08.2013


Отговори (1)


Да, това е вярно. Можете дори да погледнете източника, за да проверите. Забележете как JythonFunction разширява EvalFunc не LoadFunc.

Ако трябва да използвам python, за да се справя със зареждането на файла(ите), аз правя нещо като:

register 'myudfs.py' using jython as myudfs ;

A = LOAD 'foo.bar' AS (total:chararray) ; 
B = FOREACH A GENERATE myudf.prepare_input(total) ;

За да симулирате sudo-LoadFunc.

person mr2ert    schedule 20.08.2013
comment
Благодаря за вашият отговор. Позоваването на JythonFunction го прави наистина ясно. - person halloleo; 22.08.2013
comment
Към работата ви: Опитах точно същото. Проблемът е, че имам нужда от специално третиране за първия ред на всеки входен файл и глобален брояч на редове изброява всички редове във всички файлове, така че в foreach нямам начин да знам дали съм на първа линия или не. Ето защо се надявах да напиша истински персонализиран LoadFunc. - person halloleo; 22.08.2013
comment
За това ще ви трябва Java UDF. Те са доста болезнени за писане, но аз написах нещо, което може да е близо до това, което искате тук. Изброяването може да се извърши с RANK. Това същото ли е като този въпрос? - person mr2ert; 22.08.2013