使用pig过滤空值

j91ykkif  于 2021-06-03  发布在  Hadoop
关注(0)|答案(4)|浏览(292)

这看起来是个愚蠢的问题,但我可以´找不到从我的行中筛选空值的方法。这是我转储对象geoinfo时的结果:
转储地理信息;
([经度70.95853,纬度30.9773])
([经度#-9.37944507,纬度#38.91780853])
(空)
(空)
(空)
([经度#-92.64416,纬度#16.73326])
(空)
(空)
([经度#-9.15199849,纬度#38.71179122])
([经度#-9.15210796,纬度#38.71195131])
这是描述
描述地理信息;
地理信息:{地理位置:bytearray}
我要做的是像这样过滤空值:
geoinfo\u no\u nulls=按地理位置过滤geoinfo不为空;
但结果还是一样。不过滤任何内容。
我也试过这样的方法
geoinfo\u no\u nulls=按地理位置筛选地理信息!='空';
我犯了个错误
org.apache.pig.backend.executionengine.executexception:错误1071:无法将Map转换为字符串
我做错什么了?
详细信息,运行在ubuntu上,hadoop-1.0.3和pig0.9.3
pig版本apache pig版本0.9.3-snapshot(rexported)编译于2012年10月24日19:04:03
java版本“1.6.0\u 24”openjdk运行时环境(icedtea6 1.11.4)(6b24-1.11.4-1ubuntu0.12.04.1)openjdk 64位服务器虚拟机(内部版本20.0-b12,混合模式)

hsvhsicv

hsvhsicv1#

谢谢你们的回答。它帮助我找到路。
最后,我所使用的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';

干杯

enxuqcxy

enxuqcxy2#

我也遇到过类似的问题,类似的事情对我很有用:

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

mnemlml83#

假设您希望地理位置是以经纬度为关键字的Map,则可以将数据作为Map加载,并按如下方式检查空值:

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

不过,这只是一种变通办法。

hs1rzwqc

hs1rzwqc4#

试试这个: geoinfo_no_nulls = FILTER geoinfo BY (geomap#'geoLocation' is not null); 从错误中可以看出,它将类型识别为Map。您需要指定Map的特定键。如果这不起作用,您通常无法将该数据作为Map正确获取。请照弗雷德说的做。

相关问题