9

仅使用映射器(Python 脚本)而不使用减速器,如何为每一行输出输出一个以键为文件名的单独文件,而不是输出长文件?

4

3 回答 3

7

可以使用 -inputformat 和 -outputformat 命令行参数替换输入和输出格式类。

如何做到这一点的一个例子可以在dumbo 项目中找到,这是一个用于编写流式作业的 python 框架。它具有写入多个文件的功能,并且在内部它用其姊妹项目feathers 中的一个类替换输出格式- fm.last.feathers.output.MultipleTextFiles

然后,reducer 需要发出一个元组作为键,元组的第一个组件是应该写入具有键/值对的文件的目录的路径。可能仍然有多个文件,这取决于减速器的数量和应用程序。

我建议研究一下小飞象,它有许多特性,可以更轻松地在 Hadoop 上用 python 编写 Map/Reduce 程序。

于 2009-11-06T20:14:35.070 回答
1

使用流式传输时是否可以替换 outputFormatClass?在本机 Java 实现中,您将扩展 MultipleTextOutputFormat 类并修改命名输出文件的方法。然后使用 JobConf 的 setOutputFormat 方法将您的实现定义为新的输出格式

你应该验证,如果这在流媒体中也是可能的。我不知道:-/

于 2009-11-03T00:59:12.997 回答
1

您可以使用 python 文件函数写入本地文件系统上的文本文件,或者如果您想使用 HDFS,请使用Thrift API

于 2009-11-03T18:23:15.320 回答