【发布时间】:2012-12-02 00:13:11
【问题描述】:
我有一个文件,其中每个元组跨越多行,例如:
START
name: Jim
phone: 2128789283
address: 56 2nd street, New York, USA
END
START
name: Tom
phone: 6308789283
address: 56 5th street, Chicago, 13611, USA
END
.
.
.
所以上面是我文件中的 2 个元组。我编写了我的 UDF,它定义了一个 getNext() 函数,它检查它是否是 START 然后我将初始化我的元组;如果是 END 那么我将返回元组(来自字符串缓冲区);否则我只会将字符串添加到字符串缓冲区。
它适用于文件大小小于 64 MB 的 HDFS 块大小(在 Amazon EMR 上),而对于大于此大小的大小它将失败。我试着用谷歌搜索,找到这个blog post。 Raja 的解释很容易理解,他提供了一个示例代码。但是代码正在实现RecordReader 部分,而不是getNext() 用于猪LoadFunc。只是想知道是否有人有处理多行猪元组拆分问题的经验?我应该继续在 Pig 中实施RecordReader 吗?如果有,怎么做?
谢谢。
【问题讨论】:
-
预处理文件以将记录的所有信息放在一行中会更简单 - 一行 awk
-
如果我自己进行预处理,我无法控制输入文件,那么开销将超过 Hadoop 提供的好处。除了我在 Hadoop 中使用预处理。现在,我仍在寻找跨映射器边界处理元组的解决方案。
标签: hadoop amazon-web-services mapreduce user-defined-functions apache-pig