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

Posted

技术标签:

【中文标题】将多个变量存储到单个文件中【英文标题】:Store several variables into single file 【发布时间】:2020-10-29 11:59:00 【问题描述】:

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

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';

但它不起作用。

【问题讨论】:

【参考方案1】:

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

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'

【讨论】:

感谢您的回复!好主意,但仍未解决问题 - 您的解决方案在一个目录中生成 3 个不同的文件 :) 我做了一些改进,但仍有一些问题(请看一下)【参考方案2】:

使用@VK_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_count/B_count/C_count,但有时是 - C_count/A_count/B_count 等。所以它使结果无用...... 如果任何计数器等于 0,PIG 不会写入 0。请跳过此行。 不知道如何将计数器名称添加到结果文件中。

【讨论】:

以上是关于将多个变量存储到单个文件中的主要内容,如果未能解决你的问题,请参考以下文章

将多个音频文件存储在单个目录中 - Android

将多个变量保存在单个RDS文件中

在单个 RDS 文件中保存多个变量

Zip然后将多个文件加密到单个存档中

将多个用户购买的所有商品的价格相加并将其存储到变量中

多个图标存储在一个图像文件中[关闭]