在Pig Latin中为每个组写一个文件

问题:我有许多包含Apache Web服务器日志条目的文件。 这些条目不是按日期时间顺序排列,而是分散在文件中。 我正在尝试使用Pig来读取一天的文件,按日期时间对日志条目进行分组和排序,然后将它们写入以其包含的条目的日期和小时命名的文件。

设置:一旦我导入了我的文件,我使用Regex获取日期字段,然后我将其截断为小时。 这将生成一个集合,该集合在一个字段中包含记录,而日期在另一个字段中截断为小时。 从这里开始,我在日期时间字段上进行分组。

第一次尝试:我的第一个想法是使用STORE命令,同时使用FOREACH迭代我的组,并很快发现Pig并不酷。

第二次尝试:我的第二次尝试是在piggybank中使用MultiStorage()方法,这种方法很有效,直到我查看文件。 问题是MulitStorage想要将所有字段写入文件,包括我以前用于分组的字段。 我真正想要的只是写入文件的原始记录。

问题:那么……我是否将Pig用于不适合的事情,或者是否有更好的方法让我使用猪来解决这个问题? 现在我有了这个问题,我将编写一个简单的代码示例来进一步解释我的问题。 有了它,我会在这里发布。 提前致谢。

开箱即用,Pig没有很多function 。 它做了基本的东西,但是我发现自己不得不编写自定义UDF或加载/存储函数来获得95%的forms到100%的方式。 我通常觉得它值得,因为只是编写一个小商店函数比整个MapReduce程序少得多。

你的第二次尝试非常接近我要做的事情。 您应该复制/粘贴MultiStorage的源代码或使用inheritance作为起点。 然后,修改putNext方法以putNext组值,但仍然写入该文件。 不幸的是, Tuple没有removedelete方法,所以你必须重写整个元组。 或者,如果您拥有的只是原始字符串,只需将其拉出并输出包含在Tuple字符串。

有关编写加载/存储函数的一些常规文档,以备您需要更多帮助时: http : //pig.apache.org/docs/r0.10.0/udf.html#load-store-functions