将多个变量存储到单个文件中

ff29svar  于 2021-05-27  发布在  Hadoop
关注(0)|答案(2)|浏览(439)

我有几个日志和做一些过滤。结果我有几个变量,每一个都是统计数。我将它们保存在不同的文件中,如下所示:

STORE (FOREACH (GROUP A ALL) GENERATE COUNT(A)) INTO '$save_dir/A_result';
STORE (FOREACH (GROUP B ALL) GENERATE COUNT(B)) INTO '$save_dir/B_result';
STORE (FOREACH (GROUP C ALL) GENERATE COUNT(C)) INTO '$save_dir/C_result';

任何一行的结果-只有一个数字。如何将它们连接或合并到一个变量中,以存储到单个文件中,而不是存储到三个不同的文件中?
我试过这种方法:

B_count = FOREACH (GROUP B ALL) GENERATE COUNT(B) as b1;
result_record = FOREACH (GROUP A all) GENERATE
                'my_results' AS name,
                COUNT(A) as a1,
                B_count.b1 as b1;
STORE result_record INTO '$save_dir/total';

但它不起作用。

hts6caw3

hts6caw31#

我用@vkÙu 217的创意做了这个:

A_count = FOREACH (GROUP A ALL) GENERATE COUNT(A);
B_count = FOREACH (GROUP B ALL) GENERATE COUNT(B);
C_count = FOREACH (GROUP C ALL) GENERATE COUNT(C);

D = UNION A_count,B_count,C_count;

Result = GROUP D BY 1; 
Result = FOREACH Result GENERATE FLATTEN(Result);
STORE Result INTO '$save_dir/total';

这将生成一个包含列中3条记录的文件。这没关系。但我还是有几个问题:
pig可以按不同的顺序写结果。所以有时是a\u count/b\u count/c\u count,但有时是-c\u count/a\u count/b\u count等等,所以结果没用。。。
如果任何一个计数器等于零,pig就不写0。跳过这一行。
不知道如何将计数器的名称添加到结果文件中。

4smxwvx5

4smxwvx52#

创建关系以存储单个计数,将它们合并到另一个关系中,并将它们存储到单个文件中

A_count = (FOREACH (GROUP A ALL) GENERATE COUNT(A));
B_count = (FOREACH (GROUP B ALL) GENERATE COUNT(B));
C_count = (FOREACH (GROUP C ALL) GENERATE COUNT(C));

D = UNION A_count,B_count,C_count;

STORE D INTO '$save_dir/total'

相关问题