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)
3条答案
按热度按时间r6l8ljro1#
其实Pig不是为这个而生的。但是如果你想这样做的话,就必须编写一个自定义的存储函数。必须编写一些扩展storefunc类的类。更进一步说,它将不得不使用多个输出,因为你想存储在3个不同的文件。
参考https://pig.apache.org/docs/r0.7.0/udf.html#store+自定义存储函数的函数。
否则,在pig中,一个store命令将只存储一个别名,只存储在一个文件中。
对于这种需求,最好编写javamr。
jpfvwuh42#
您可以尝试使用multistorage()选项,它将在piggybank jar中提供。您需要下载pig-0.11.1.jar并将其设置在类路径中。
例子:
输入文件
Pig手稿:
现在输出文件夹包含3个dir a、b、c,文件名(a-0000、b-0000和c-0000)包含实际值
输出$ls
输出$cat a/a-0000
输出$cat b/b-0000
输出$cat c/c-0000
svmlkihl3#
使用split操作符根据某个表达式将关系的内容划分为两个或多个关系。根据表达式中所述的条件:
例子
在本例中,关系a被分为三个关系x、y和z。
然后根据文件名存储x,y,z
我的目标是读取一个文件,并根据它适合您的问题的标准将记录写入不同的文件。