Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用拉丁语为每组编写一个文件_Java_Hadoop_Apache Pig - Fatal编程技术网

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

Java 用拉丁语为每组编写一个文件,java,hadoop,apache-pig,Java,Hadoop,Apache Pig,问题: 我有许多包含Apache web服务器日志项的文件。这些条目不按日期-时间顺序排列,分散在各个文件中。我试图使用Pig读取一天的文件,按日期时间对日志条目进行分组和排序,然后将它们写入以其包含的条目的日期和时间命名的文件中 设置: 导入文件后,我将使用正则表达式获取日期字段,然后将其截断为小时。这将生成一个集合,其中一个字段中有记录,而另一个字段中的日期被截断为小时。从这里开始,我在date hour字段上分组 第一次尝试: 我的第一个想法是在使用FOREACH遍历我的组时使用STORE

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

设置: 导入文件后,我将使用正则表达式获取日期字段,然后将其截断为小时。这将生成一个集合,其中一个字段中有记录,而另一个字段中的日期被截断为小时。从这里开始,我在date hour字段上分组

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

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

问题:
所以…我是不是在用Pig来做一些不该做的事情,还是有更好的方法来解决这个问题?现在我有了这个问题,我将使用一个简单的代码示例来进一步解释我的问题。一旦我有了它,我会把它贴在这里。提前感谢。

开箱即用,Pig没有很多功能。它做了一些基本的工作,但我发现自己不得不编写定制的自定义自定义函数或加载/存储函数,以实现从95%到100%的转换。我通常认为这是值得的,因为仅仅编写一个小的存储函数比编写一个完整的MapReduce程序要少得多

你的第二次尝试非常接近我会做的。您应该复制/粘贴
MultiStorage
的源代码,或者使用继承作为起点。然后,修改
putNext
方法以去掉组值,但仍写入该文件。不幸的是,没有
remove
delete
方法,因此必须重写整个元组。或者,如果您只有原始字符串,只需将其拉出并输出包装在
元组中的


一些关于编写加载/存储函数的一般文档,以防您需要更多帮助:

谢谢orangeoctopus,这正是我想要的。我已经编写了一个自定义的eval自定义项,我可以假设编写自定义加载/存储自定义项的过程是类似的吗?我对Java有点陌生…边学边学。这会有点复杂,但不会那么糟糕。开源最好的部分之一是能够从执行类似操作的事物中复制/粘贴(从学习的意义上讲)。我建议你尝试一下,如果你有困难,回来发布一个新问题!我认识很多SQL背景的人,他们对Java一窍不通。首先,我将MulitStorage的源代码复制到StoreUDF/MultiStorageUDF.Java中--然后我将类和构造函数重命名为MultiStorageUDF,并将包更改为myudf--然后我将pig.jar复制到StoreUDF中——接下来我做了“javac-cp pig.jar MultiStorageUDF.java”--然后我启动了一个direcotry并运行了“jar-cf MyUDFs.jar StoreUDF”。在我的.pig文件中,我在我的pig文件中将jar注册为“register MyUDFs.jar;”,并调用类似“…USING MyUDFs.MultiStorageUDF(“$OUTPUT”,“0”);”的函数。当我运行作业时,我收到一条错误消息,上面写着“error 1070:无法使用导入解析MyUDFs.MultiStorageUDF:”。我做错了什么?我的UDF编译得很好,我正在尽我所能正确地引用它。我刚刚发现了它。包含my.java文件和pig.jar文件的目录名必须与我的包同名。看起来像Java基础。