Untuk Apache Pig, bagaimana cara menulis Load UDF dengan python

Saya ingin menulis fungsi Load UDF Python untuk Apache Pig, sehingga saya dapat menggunakannya dengan cara berikut dalam skrip Pig:

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

Dokumentasi Pig memberikan beberapa detail untuk menulis Load UDF di Java, tapi tidak dengan Python. Saya telah berhasil mengimplementasikan fungsi Eval yang cukup berguna dengan Python, tetapi saya tidak dapat menemukan apa pun tentang cara menulis fungsi Load dalam bahasa ini.

Karena saya telah mengimplementasikan beberapa Eval UDF dengan Python, saya ingin tetap menggunakan bahasa ini untuk semua UDF saya.


person halloleo    schedule 19.08.2013    source sumber
comment
Saya baru saja menemukan jawaban ini: Menurut @Ian_Stevens, LoadFuncs untuk Pig tidak dapat ditulis dengan Python . Ini akan menjelaskan mengapa dokumentasi tidak membahas hal itu. Tapi apakah itu benar?   -  person halloleo    schedule 19.08.2013


Jawaban (1)


Ya itu benar. Anda bahkan dapat melihat sumbernya untuk memverifikasi. Perhatikan caranya JythonFunction diperluas EvalFunc bukan LoadFunc.

Jika saya perlu menggunakan python untuk menangani pemuatan file yang saya lakukan adalah seperti:

register 'myudfs.py' using jython as myudfs ;

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

Untuk mensimulasikan sudo-LoadFunc.

person mr2ert    schedule 20.08.2013
comment
Terima kasih atas jawaban anda. Referensi ke JythonFunction membuatnya sangat jelas. - person halloleo; 22.08.2013
comment
Untuk mengatasi masalah Anda: Saya mencoba hal yang persis sama. Masalahnya adalah saya memerlukan perlakuan khusus untuk baris pertama dari setiap file input dan penghitung baris global menghitung semua baris di semua file, jadi di foreach saya tidak punya cara untuk tahu apakah saya berada di baris pertama atau tidak. Itu sebabnya saya berharap untuk menulis LoadFunc kebiasaan nyata. - person halloleo; 22.08.2013
comment
Anda memerlukan Java UDF untuk itu. Menulisnya cukup menyakitkan, tetapi saya menulis sesuatu yang mungkin mendekati apa yang Anda inginkan di sini. Pencacahan dapat dilakukan dengan RANK. Apakah ini sama dengan pertanyaan ini? - person mr2ert; 22.08.2013