我不想提供单个文件作为输入,而是想提供一个目录,其中可以不包含任何文件。我希望以某种方式编写输出
输入 :
文件 1 文件 2 文件 3
输出 :
文件 1 文件 2 文件 3
而每个文件都应该在相应的文件中有它的字数。要确定地图中使用了哪个文件,我可以使用 context.getInputSplit() 。但是我怎样才能让它以我想要的方式编写输出。
您可以使用映射器中的输入拆分来识别它们来自的文件,并将其与MultipleOutputs结合使用以将文件与 reducer 分开。
但是,您需要将它来自的文件传递给减速器,因此您可能需要创建一个复合键对象并编写一个自定义Partitioner
并将WritableComparator
文件名和原始键一起传递。请参阅:Hadoop - 复合键