bigdata—将pig中的一个记录与另一个数据集中的另一个记录进行比较

u5rb5r59  于 2021-06-24  发布在  Pig
关注(0)|答案(1)|浏览(291)

我是一个新手Pig和我的工作与一个大的业务数据文件。商业数据文件有来自世界各地的城市,我只希望与美国城市的工作。我有 LOADED 这两个数据集都成功,我正在尝试遍历整个业务数据文件,并删除所有不在美国城市数据集中的城市。

raw_bus_data = LOAD 'globalbus.json' USING com.twitter.elphantbird.pig.load.JsonLoader('-nestedLoad') as (row: map[]);

us_citystate = LOAD 'us.csv' USING PigStorage(',') AS (city:chararray, state:chararray);

我意识到下一行行不通,但我正在尝试做类似的事情:

bus_us_data = FILTER raw_bus_data BY state == us_citystate state;

我需要用这个吗 FOREACH 为了什么?

z31licg0

z31licg01#

您可以执行一个内部连接,它将有效地过滤掉任何不包含us状态的行。因为 us_citystate 如果每个州有多行(每个城市一行),则需要创建一个新关系 B 每个状态只包含一行,否则将从中复制行 bus_us_data . 执行此操作和内部联接的代码是:

A = FOREACH us_citystate GENERATE state;
B = DISTINCT A;
C = JOIN raw_bus_data BY state, B BY state;
bus_us_data = FOREACH C GENERATE 
    raw_bus_data::var1 AS var1, 
    raw_bus_data::var2 AS var2;

其中var1、var2等是您希望从中保留的字段 raw_bus_data .

相关问题