我设计了一个系统,其中每个映射函数都假设将其输入(包含多个 CSV 记录的文件拆分)加载到数据结构中并处理它们,而不是逐行处理。将有多个映射器,因为我将处理数百万条记录,因此一个映射器完全没有效率。
我从 WordCount 中的示例中看到,map 函数正在逐行读取。几乎从它接收到的拆分中,每一行都会调用 map 函数。我相信这张地图的输入应该是完整的线路本身,而不是一次发送一条线路。
Reduce 函数还有其他任务。所以我想,可以调整地图功能来完成分配的任务。有解决方法吗?
根据您的解释,我了解到您的地图输入不是单行,而是由多行构建的一些结构。
在这种情况下 - 您应该创建自己的 InputFormat,它将输入流(来自拆分)转换为 YourDataStructure 集群的对象序列。您的映射器将接受这些 YourDataStructure 对象。
如果整个脚本实际上是您想要处理的结构 - 我建议在一个技巧中完成 mapper 中的所有逻辑 - 您应该知道何时拆分的最后一行。可以通过继承 TextInputFormat 并对其进行调整以指示您有最后一行来完成。然后你在映射器中逐行构建你的结构,当最后一行被指示时——做这项工作
。