这看起来是一个愚蠢的问题,但我无法找到从行中筛选空值的方法。这是当我转储对象geoinfo时的结果:
转储地理信息;(longitude#70.95853,latitude#30.9773)(经度#-9.37944507,latitude#30.9773 latitude#38.71179122)(经度#-9.15210796,latitude#38.71195131)
下面是描述
描述地理信息;地理信息:{geoLocation:字节数组}
我要做的是过滤空值,例如:
geoinfo_no_nulls = geoLocation过滤地理信息不为空;
但结果依然不变。没有什么是被过滤的。
我也尝试过这样的方法
geoinfo_no_nulls =用geoLocation !=‘null’过滤地理信息;
我犯了个错误
org.apache.pig.backend.executionengine.ExecException:错误1071:无法将映射转换为字符串
我做错了什么?
详细信息,运行在ubuntu上,hadoop-1.0.3和pig 0.9.3
pig -version Apache版本0.9.3-快照(重新移植)编译于2012年10月24日,19:04:03
java版本"1.6.0_24“OpenJDK运行时环境(IcedTea6 1.11.4) (6b24-1.11.4-1ubuntu0.12.04.1) OpenJDK 64位服务器VM (Build20.0-B12,混合模式)
发布于 2012-11-17 04:54:32
谢谢你们的回答伙计们。它能帮我找到这条路。
最后,我正在使用的JsonLoader的问题接缝。我不知道确切的原因,但是如果有一个带有空字符串的bug就会接缝。
最后,我将代码更改为使用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';干杯
发布于 2012-10-31 18:40:21
我也有类似的问题,这样的事情对我来说很管用:
geoinfo_no_nulls = FILTER geoinfo BY geoLocation != '';发布于 2012-10-31 22:55:39
假设您希望您的地理位置是一个以经度和纬度为键的地图,您可以将数据加载为map,并按如下方式检查空值:
A = LOAD 'data' AS (f1:map[]);
B = FILTER A BY f1#longitude is not null and f1#latitude is not null;不过,这只是一种解决办法。
https://stackoverflow.com/questions/13165337
复制相似问题