在Pig中的另一个数据集中比较一个记录与另一个记录

时间:2018-03-19 23:42:54

标签: bigdata apache-pig apache-zeppelin

我是Pig的初学者,我正在使用大型业务数据文件。业务数据文件包含来自世界各地的城市,我希望与美国城市合作。我已成功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

这是我需要使用filepath = 'temp.txt' with open(filepath) as fp: for single_line in fp.readlines(): if single_line.strip().startswith("Server"): last_instance = single_line.strip() print(last_instance) 吗?

1 个答案:

答案 0 :(得分:1)

您可以执行内部联接,这将有效地过滤掉任何不包含US状态的行。由于null每个州都有多行(每个城市一行),因此您需要创建一个新关系us_citystate,每个州只包含一行,否则您将复制来自{{1}的行}。执行此操作的代码和内部联接是:

B

其中var1,var2等是您希望保留bus_us_data的字段。