2012-10-31 19 views
12

यह एक मूर्ख समस्या की तरह दिखता है, लेकिन मुझे अपनी पंक्तियों से शून्य मानों को फ़िल्टर करने का कोई तरीका नहीं मिल रहा है। यह परिणाम जब मैं वस्तु geoinfo डंप है:सुअर के साथ शून्य मानों को फ़िल्टर करना

geoinfo_no_nulls = FILTER geoinfo BY geoLocation is not null;

:

DUMP geoinfo;
([longitude#70.95853,latitude#30.9773])
([longitude#-9.37944507,latitude#38.91780853])
(null)
(null)
(null)
([longitude#-92.64416,latitude#16.73326])
(null)
(null)
([longitude#-9.15199849,latitude#38.71179122])
([longitude#-9.15210796,latitude#38.71195131])

यहाँ वर्णन

DESCRIBE geoinfo;
geoinfo: {geoLocation: bytearray}

मुझे क्या करना कोशिश कर रहा हूँ इस तरह शून्य मान फिल्टर करने के लिए है

लेकिन परिणाम वही बना हुआ है। कुछ भी फ़िल्टर नहीं किया गया है।

मैं भी इस

geoinfo_no_nulls = FILTER geoinfo BY geoLocation != 'null';

की तरह कुछ करने की कोशिश की और मैं एक त्रुटि

org.apache.pig.backend.executionengine.ExecException: ERROR 1071: Cannot convert a map to a String

क्या मैं गलत कर रहा हूँ मिल गया?

विवरण, 0.9.3

सुअर -संस्करण अपाचे सुअर संस्करण 0.9.3-स्नैपशॉट (rexported) संकलित अक्टू 24 2012, 19:04:03 सुअर के साथ ubuntu, Hadoop-1.0.3 पर चल रहा है

जावा संस्करण "1.6.0_24" OpenJDK रनटाइम वातावरण (IcedTea6 1.11.4) (6b24-1.11.4-1ubuntu0.12.04.1) OpenJDK 64-बिट सर्वर वी एम (निर्माण 20.0-बी 12, मिश्रित मोड)

+0

अपनी पूरी स्क्रिप्ट पोस्ट करें। –

उत्तर

3

मुझे इसी तरह का मुद्दा था और ऐसा कुछ मेरे लिए काम किया:

geoinfo_no_nulls = FILTER geoinfo BY geoLocation != ''; 
+0

मुझे त्रुटि मिली > ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2997: समर्थित त्रुटि से अपवाद को फिर से बनाने में असमर्थ: org.apache.pig.backend.executionengine.ExecException: ERROR 1071: मानचित्र को परिवर्तित नहीं कर सकता एक स्ट्रिंग –

+0

पर बहुत ज्यादा किशन। यह हल करने के बारे में नहीं पता। –

+0

इसे geoinfo के रूप में देने का प्रयास करें। $ 0! = '' या geoinfo.geoLocation! = ''। उनमें से कोई भी काम करना चाहिए – emkay

0

आप मानते हुए, अपने भौगोलिक स्थान देशांतर और कुंजी के रूप में अक्षांश के साथ एक नक्शा होना चाहता हूँ आप नक्शे के रूप में अपने डेटा लोड और nulls के लिए जांच कर सकता है इस प्रकार है:

A = LOAD 'data' AS (f1:map[]); 
B = FILTER A BY f1#longitude is not null and f1#latitude is not null; 

यह एक समाधान की तरह है केवल , हालांकि।

0

इस प्रयास करें:

geoinfo_no_nulls = FILTER geoinfo BY (geomap#'geoLocation' is not null);

मैं त्रुटि यह एक नक्शे के रूप में प्रकार पहचानना है से देख सकते हैं। आपको मानचित्र की विशेष कुंजी निर्दिष्ट करने की आवश्यकता है। यदि यह काम नहीं करता है, तो आप आमतौर पर उस डेटा को मानचित्र के रूप में ठीक से नहीं प्राप्त कर रहे हैं। कृपया फ्रेड इंगित करने की कोशिश करें।

3

आपके उत्तरों के लिए धन्यवाद। यह मुझे पथ खोजने में मदद करता है।

अंत में समस्या जेसनलोडर के साथ होने वाली सीम का उपयोग कर रही थी। मुझे नहीं पता कि वास्तव में क्यों, लेकिन यह नल तारों के साथ एक बग रखने के लिए seams।

अंत में मैंने https://github.com/kevinweil/elephant-bird का उपयोग करने के लिए अपना कोड बदल दिया।

कोड अब इस तरह दिखता है:

register 'elephant-bird-core-3.0.0.jar' 
    register 'elephant-bird-pig-3.0.0.jar' 
    register 'google-collections-1.0.jar' 
    register 'json-simple-1.1.jar' 

    json_lines = LOAD '/twitterecho/tweets/stream/v1/json/2012_10_10/08' USING com.twitter.elephantbird.pig.load.JsonLoader(); 

    geo_tweets = FOREACH json_lines GENERATE (CHARARRAY) $0#'id' AS id, (CHARARRAY) $0#'geoLocation' AS geoLocation; 

    tweets_grp = GROUP geo_tweets BY id; 
    unique_tweets = FOREACH tweets_grp { 
      first_tweet = LIMIT inpt 1; 
      GENERATE FLATTEN(first_tweet); 
    }; 

    only_not_nulls = FILTER geo_tweets BY geoLocation is not null; 
    store only_not_nulls into '/twitter_data/results/geo_tweets'; 

चियर्स