我是PIG的新手,我有一个问题。我不知道是否可能。
所有的拳头,我有一个文件:
?(A,B,C,D): - File1(A),File2(B),File3(C),File4(A,B),File5(A,C),File6(C,B) ,File7(A,D)。
我必须在PIG中创建一个脚本,获取此文件,并且,对于每个条目,研究File参数......
例如,在这一个中,脚本必须在File1中找到参数A,在File2 B中找到File3C ...
但我不知道有多少档案。它们只能有1个参数或2个。
我可以轻松加载这些文件,它们共有2列。
对于每个文件{
A =加载' FileX'使用PigStorage(':')作为(Col1:chararray,Col2:chararray);
B =过滤器A由Col1 == X和Col2 == Y;
STORE B INTO'结果'使用PigStorage('');
}
这种代码可能吗?
第二种方式,我想重新组合具有相同参数的文件: 对于File1,File5和File7来说,通过一个组或者其他东西......避免重复相同的过滤。 我做了很多测试,但我没有找到任何有用的东西。 谢谢:))
答案 0 :(得分:0)
这种代码可能吗?
不,Pig只是一个数据流,没有控制流程。
Pig Latin是一种数据流语言。与通用编程不同 语言,它不包括控制流构造,如if和 对于。 ref
您可以将您的Pig脚本嵌入到python java或java-script脚本中以启用流控制,请参阅here。
答案 1 :(得分:0)
你可能在这里有shell脚本和猪的组合。
您的猪脚本应该是
A = load '$inputfile' using PigStorage (':') as (Col1:chararray, Col2:chararray);
B = filter A by Col1 == X AND Col2== Y;
STORE B INTO 'result' using PigStorage(' ');
然后你从shell中调用这个pig脚本
你可以做一个
for a in `hadoop fs cat <firstfile> | awk -F "," '{print $0}'`
do
pig -f script.pig -param inputfile=$a
done