2011-03-07 11 views
8

में रिकॉर्ड के पूरे सेट के लिए मैं एक सेट रिकॉर्ड है कि मैं एक फ़ाइल और पहली बात मैं क्या करने की जरूरत से लोड हो रहा है कर रहा हूँ का सेट हो, अधिकतम और एक स्तंभ के मिनट मिलता है। एसक्यूएल में मैं इस तरह एक सबक्वेरी के साथ ऐसा होगा:अधिकतम/न्यूनतम सुअर

select c.state, c.population, 
(select max(c.population) from state_info c) as max_pop, 
(select min(c.population) from state_info c) as min_pop 
from state_info c 

मुझे लगता है के रूप में अच्छी सुअर में यह करने के लिए एक आसान तरीका होना चाहिए, लेकिन मैं मुसीबत यह खोजने आ रही है। यह एक मैक्स और मिन समारोह है, लेकिन यह काम नहीं किया, जब मैं निम्न कार्य करने की कोशिश की:

records=LOAD '/Users/Winter/School/st_incm.txt' AS (state:chararray, population:int); 
with_max = FOREACH records GENERATE state, population, MAX(population); 

यह काम नहीं किया। मेरे पास प्रत्येक पंक्ति के समान मूल्य के साथ एक अतिरिक्त कॉलम जोड़ने और फिर उस कॉलम पर उन्हें समूहीकृत करने के लिए बेहतर भाग्य था। फिर उस नए समूह पर अधिकतम प्राप्त करना। ऐसा लगता है कि मैं जो चाहता हूं उसे प्राप्त करने के एक ठोस तरीके की तरह लगता है, मैंने सोचा कि मैं पूछूंगा कि कोई आसान तरीका जानता है या नहीं।

मदद के लिए अग्रिम धन्यवाद।

उत्तर

15

जैसा कि आपने कहा आप समूह में सभी डेटा एक साथ की जरूरत है, लेकिन यदि आप GROUP ALL का उपयोग बिना किसी अतिरिक्त स्तंभ की आवश्यकता है।

सुअर

records = LOAD 'states.txt' AS (state:chararray, population:int); 
records_group = GROUP records ALL; 
with_max = FOREACH records_group 
      GENERATE 
       FLATTEN(records.(state, population)), MAX(records.population); 

इनपुट

CA 10 
VA 5 
WI 2 

आउटपुट

(CA,10,10) 
(VA,5,10) 
(WI,2,10) 
+0

धन्यवाद - मैं वहाँ जानता था कि ऐसा करने के लिए एक आसान तरीका होना ही था। – Winter

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