สำหรับ Apache Pig ฉันจะเขียน Load UDF ใน python ได้อย่างไร

ฉันต้องการเขียนฟังก์ชัน Python UDF Load สำหรับ Apache Pig เพื่อให้สามารถใช้งานได้ในลักษณะต่อไปนี้ในสคริปต์ Pig:

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

เอกสารประกอบของ Pig ให้รายละเอียดบางอย่างสำหรับการเขียน Load UDFs ใน Java แต่ ไม่ใช่ใน Python ฉันจัดการเพื่อใช้ฟังก์ชัน Eval ที่มีประโยชน์กับ Python ได้ แต่ฉันไม่พบสิ่งใดเกี่ยวกับวิธีการเขียนฟังก์ชัน Load ในภาษานี้

เนื่องจากฉันได้ติดตั้ง 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
สำหรับงานของคุณ: ฉันพยายามเหมือนกันทุกประการ ปัญหาคือฉันต้องได้รับการดูแลเป็นพิเศษสำหรับบรรทัดที่ 1 ของไฟล์อินพุต แต่ละ และตัวนับบรรทัดส่วนกลางระบุทุกบรรทัดใน ไฟล์ทั้งหมด ดังนั้นใน foreach ฉันไม่มีทาง รู้ว่าฉันอยู่ในบรรทัดแรกหรือไม่ นั่นเป็นเหตุผลที่ฉันหวังที่จะเขียนแบบกำหนดเองที่แท้จริง LoadFunc - person halloleo; 22.08.2013
comment
คุณจะต้องมี Java UDF เพื่อสิ่งนั้น การเขียนค่อนข้างลำบากใจ แต่ฉันเขียนบางอย่างที่อาจใกล้เคียงกับสิ่งที่คุณต้องการที่นี่ การแจงนับสามารถทำได้ด้วย RANK สิ่งนี้เหมือนกับ คำถามนี้? - person mr2ert; 22.08.2013