pig:筛选集合上的多列表

pn9klfpd  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(319)

我有以下输入:

input = LOAD '$in_data' USING PigStorage('\t', '-schmea') AS (
   uid:chararray,
   pid:int,
   token:chararray
);
stpwrd = LOAD '$stpwrd' USING PigStorage('\t', '-schema') AS (
   token:chararray
);

我的目标可以总结为以下伪代码:

output = FILTER input BY NOT IN(input.token, stpwrd);

,理想情况下在 input 谁的表 input.token 字段不在 stpwrd .
我查过了 SetDifference() 自定义项输入 datafu (link),但我不确定这是否能起作用,因为它似乎要求两个表都是单例表,而我的 input 表有多列。

ddhy6vgd

ddhy6vgd1#

我们可以通过使用right join和过滤stpwrd中的记录来实现这个目标,下面的一个例子说明了这个用法。
输入:输入数据

uid1    1   token1
uid2    2   token2
uid3    3   token3

输入:stpwrd

token1
token2

Pig脚本:

input_data = LOAD 'input_data' USING PigStorage('\t') AS (
   uid:chararray,
   pid:int,
   token:chararray
);

stpwrd = LOAD 'stpwrd' USING PigStorage('\t') AS (
   token:chararray
);

output_data = JOIN stpwrd BY token RIGHT, input_data BY token;

req_data = FILTER output_data BY stpwrd::token IS NULL;

输出:req\ U数据

(,uid3,3,token3)

请求数据别名中的项目必填字段。

相关问题