PIG:研究许多文件

时间:2016-06-21 18:10:51

标签: apache-pig

我是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来说,通过一个组或者其他东西......避免重复相同的过滤。 我做了很多测试,但我没有找到任何有用的东西。 谢谢:))

2 个答案:

答案 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