将多个变量存储到单个文件中
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。请跳过此行。 不知道如何将计数器名称添加到结果文件中。【讨论】:
以上是关于将多个变量存储到单个文件中的主要内容,如果未能解决你的问题,请参考以下文章