Для 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, але я не міг знайти нічого про те, як писати функції завантаження цією мовою.

Оскільки я вже реалізував кілька UDF Eval у 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