文件有数据:
A 12345
B 32122
C 23232
只运行一次pig脚本并将第一个record(A 12345)
存储在一个文件中的选项是什么,second record(B 32122)
存储在第二个文件中,third(c 23232)
存储在第三个文件中。现在,如果我们运行猪脚本,它将为每个商店运行工作。请让我知道这个选项。
答案 0 :(得分:0)
实际上猪不是为此而制造的。但是如果你想这样做,那么就必须编写自定义商店功能。将不得不编写一些扩展StoreFunc类的类。在内部它将不得不使用多个输出,因为你想存储3个不同的文件。
请参阅https://pig.apache.org/docs/r0.7.0/udf.html#Store+Functions了解自定义商店功能。
否则在pig中,一个store命令将只存储一个别名,只存储在一个文件中。
对于这种要求,你可以更好地编写JAVA MR。
答案 1 :(得分:0)
您可以尝试使用 MultiStorage()选项,它可以在 piggybank jar 中使用。你需要下载 pig-0.11.1.jar 并在你的类路径中设置它。
示例:强>
的 input.txt中强>
A 12345
B 32122
C 23232
<强> PigScript:强>
A = LOAD 'input.txt' USING PigStorage(' ') AS (f1,f2);
STORE A INTO 'output' USING org.apache.pig.piggybank.storage.MultiStorage('output', '0');
现在输出文件夹包含 3 dirs A,B,C 和文件名(A-0,000,B-0,000和C-0,000)包含实际值
输出$ ls
A B C _SUCCESS
输出$ cat A / A-0,000
A 12345
输出$ cat B / B-0,000
B 32122
输出$ cat C / C-0,000
C 23232
答案 2 :(得分:0)
使用SPLIT运算符根据某个表达式将关系的内容划分为两个或多个关系。取决于表达式中所述的条件:
A tuple may be assigned to more than one relation.
A tuple may not be assigned to any relation.
实施例
在此示例中,关系A被分为三个关系,X,Y和Z。
A = LOAD 'data' AS (f1:int,f2:int,f3:int);
DUMP A;
(1,2,3)
(4,5,6)
(7,8,9)
SPLIT A INTO X IF f1<7, Y IF f2==5, Z IF (f3<6 OR f3>6);
DUMP X;
(1,2,3)
(4,5,6)
DUMP Y;
(4,5,6)
DUMP Z;
(1,2,3)
(7,8,9)
然后根据您的文件名存储X,Y,Z
我的目标是根据标准读取文件并将记录写入不同的文件中。。