2012-08-24 10 views
6

उदाहरण एक बैग के भीतर प्रत्येक तत्व के लिए foreach ऑपरेटर लागू:,सुअर:

class: {teacher_name: chararray,students: {(firstname: chararray, lastname: chararray)} 

मैं प्रत्येक छात्र पर कार्रवाई करना चाहते हैं, जबकि: मैं एक संबंध "वर्ग", छात्रों के लिए एक आंतरिक बैग के साथ है वैश्विक संरचना अछूता, यानी छोड़ रहा है, प्राप्त:

class: {teacher_name: chararray,students: {(fullname: chararray)} 

जहां प्रत्येक छात्र, पूरा नाम = concat के लिए (firstname, lastname)

मेरे समझ के साथ कि एक नेस्टेड foreach मेरे यहाँ समाधान के रूप में नहीं होगा, है यह अभी भी केवल 1 रिकॉर्ड प्रति इनपुट टुपल उत्पन्न करता है, जबकि मुझे कुछ बैग चाहिए जो प्रत्येक बैग आइटम के भीतर लागू होगा।

सुंदर एक यूडीएफ के साथ क्या करने के लिए आसान है, लेकिन आश्चर्य है अगर यह शुद्ध Piglatin

उत्तर

19

में यह करने के लिए सुअर 0.10 यह यूडीएफ के बिना संभव है में संभव है, के रूप में foreach foreach में नेस्ट जा सकता है। यहां एक उदाहरण दिया गया है:

inpt = load '~/pig/data/bag_concat.dat' as (k : chararray, c1 : chararray, c2 : chararray); 
dump inpt; 
1 q w 
1 s d 
2 q a 
2 t y 
2 u i 
2 o p 

bags = group inpt by k; 
describe bags; 

bags: {group: chararray,inpt: {(k: chararray,c1: chararray,c2: chararray)}} 

result = foreach bags { 
    concat = foreach inpt generate CONCAT(c1, c2); --it will iterate only over the records of the inpt bag 
    generate group, concat; 
}; 
dump result; 

(1,{(qw),(sd)}) 
(2,{(qa),(ty),(ui),(op)}) 
+0

आपने जो भी किया है, नेस्टेड फोरैच का उपयोग क्या है, जो समूह के बाद उत्पन्नकर्ता में किया जा सकता है। तो ऐसा लगता है कि यह बहुत दृश्य नहीं है .. क्या आप कृपया समझा सकते हैं। –

+0

नेस्टेड foreach बैग के तत्वों के माध्यम से पुनरावृत्त किया गया था और इस प्रकार संरक्षित बैग था। यदि आपको बैग को संरक्षित करने और युद्ध से बचाने की आवश्यकता नहीं है, लेकिन यह कोई सवाल नहीं था। – alexeipab

संबंधित मुद्दे