用pig拉丁语为每个组编写一个文件

j2datikz  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(307)

问题是:我有许多包含apacheweb服务器日志条目的文件。这些条目不是按日期时间顺序排列的,而是分散在各个文件中。我正在尝试使用pig读取一天的文件,按日期和时间对日志条目进行分组和排序,然后将它们写入以其包含的条目的日期和时间命名的文件中。
设置:一旦我导入了我的文件,我就用regex来获取日期字段,然后我把它截短到小时。这将生成一个集合,其中一个字段中包含记录,另一个字段中的日期将截断为小时。从这里开始,我在date hour字段上分组。
第一次尝试:我的第一个想法是使用store命令,同时使用foreach在我的组中进行迭代,并很快发现使用pig并不酷。
第二次尝试:我的第二次尝试是在piggybank中使用multistorage()方法,这个方法在我查看文件之前非常有效。问题是mulitstorage希望将所有字段写入文件,包括我用来分组的字段。我真正想要的只是写入文件的原始记录。
问题是:那么…我是不是在用pig来做一些不该做的事情,或者有没有更好的方法让我用pig来解决这个问题?现在我有了这个问题,我将用一个简单的代码示例来进一步解释我的问题。一旦我有了它,我会把它贴在这里。提前谢谢。

cbjzeqam

cbjzeqam1#

开箱即用,pig没有很多功能。它做了一些基本的工作,但我发现自己不得不编写自定义的udf或加载/存储函数,以实现从95%到100%的转换。我通常认为这是值得的,因为仅仅编写一个小的存储函数比编写一个完整的mapreduce程序要少得多。
你的第二次尝试真的很接近我会做的。您应该复制/粘贴 MultiStorage 或者使用继承作为起点。然后,修改 putNext 方法除去组值,但仍写入该文件。不幸的是, Tuple 没有一个 remove 或者 delete 方法,所以必须重写整个元组。或者,如果您只有原始字符串,只需将其拉出并输出 Package 在 Tuple .
一些关于编写加载/存储函数的通用文档,以防您需要更多帮助:http://pig.apache.org/docs/r0.10.0/udf.html#load-存储功能

相关问题