It looks like a silly problem, but I can´t find a way to filter null values from my rows. This is the result when I dump the object geoinfo:
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])
here is the description
DESCRIBE geoinfo;
geoinfo: {geoLocation: bytearray}
What I'm trying to do is to filter null values like this:
geoinfo_no_nulls = FILTER geoinfo BY geoLocation is not null;
but the result remains the same. nothing is filtered.
I also tried something like this
geoinfo_no_nulls = FILTER geoinfo BY geoLocation != 'null';
and I got an error
org.apache.pig.backend.executionengine.ExecException: ERROR 1071: Cannot convert a map to a String
What am I doing wrong?
details, running on ubuntu, hadoop-1.0.3 with pig 0.9.3
pig -version Apache Pig version 0.9.3-SNAPSHOT (rexported) compiled Oct 24 2012, 19:04:03
java version "1.6.0_24" OpenJDK Runtime Environment (IcedTea6 1.11.4) (6b24-1.11.4-1ubuntu0.12.04.1) OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
After creating the formula for what you want to do, you can filter on the formula column you created in the search bar by typing the value {blank}, {empty}, or {null}, which will act as a filter. Then, you can type normal filter syntax, such as customer name = {empty} or department != {null} .
Thank you for your answers guys. It help me to find the path.
In the end the problem seams to be with the JsonLoader I was using. I don't know why exactly, but it seams to have a bug with null strings.
I finally changed my code to use https://github.com/kevinweil/elephant-bird.
the code now looks like this:
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';
cheers
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With