我有一个项目,其中我计算帐户上的各种数据,并将每个数据保存在不同的文件中(每个计算都有不同的脚本)。然后,我需要创建最后一个文件,它将一个帐户的所有数据合并在一起。一种方法是将每个输出保存在不同的目录中,而不是在最终的脚本中,用一个模式加载每个目录,按帐户加入(或联合组)并打印。这里的问题是,我需要告诉pig要加载哪些目录。我想制作一个更通用的脚本,这样就可以很容易地添加更多的计算,所以我创建了一个父目录,并将所有输出保存在该目录下(子目录中)。然后我写了这个剧本
attributes_data= load '$attributes_data' using CSVLoader;
union_data= group attributes_data by TRIM ($0);
final_output= foreach union_data generate
FLATTEN(Merge_Bags(attributes_data));
store order_data into '$final_attr' using AttributesStorer;
这样,我不需要告诉pig应该加载哪些文件,它只需加载输出目录下的所有子目录。这里的问题是,在group by之后的包中元组的顺序不一致,所以我的最终结果没有一致的顺序,这是一个问题。
我非常欣赏你的想法,使脚本尽可能通用,同时在最终结果中保存一些数据顺序。
1条答案
按热度按时间xienkqul1#
在分组之前,您可以尝试使用ORDERBY子句,如果这样可以达到目的的话。