将hadoop map函数的文件分割输入加载到数据结构中

时间:2012-11-13 18:11:59

标签: hadoop

我设计了一个系统,其中每个map函数都假设将其输入(包含多个csv记录的文件拆分)加载到数据结构中并处理它们而不是逐行处理。将会有多个mappper,因为我将处理数百万条记录,因此一台映射器效率非常低。

我从wordcount的例子中看到,map函数是逐行读取的。几乎从map函数调用它接收的分割中的每一行。我相信这张地图的输入应该是完整的行,而不是一次发送一行。

减少功能还有其他任务。所以我想,可以调整map函数来完成它所分配的任务。

有解决方法吗?

帮助表示赞赏。

干杯

1 个答案:

答案 0 :(得分:0)

从你的解释我明白你的地图输入不是单行,而是从几行构建的结构。
在这种情况下 - 你应该创建自己的InputFormat来转换输入流(来自分割)到YourDataStructure cluss的对象序列。并且您的映射器将接受这些YourDataStructure对象。

如果整个脚本实际上是你要处理的结构 - 我建议用一个技巧在mapper中完成所有逻辑 - 你应该知道何时有分裂的最后一行。可以通过继承TextInputFormat并调整它来指示您有最后一行。然后,您逐行在mapper中构建结构,并在指示最后一行时执行作业。