有没有办法确定传递给Hadoop / Dumbo / Mrjob中的地图作业的文件名?

时间:2012-04-17 03:35:16

标签: python hadoop mrjob

所有

我正在创建一个界面,用于处理一些海量数据并生成arff文件,以便进行一些机器学习。我目前可以收集这些功能 - 但我无法将它们与它们派生自的文件相关联。我目前正在使用Dumbo

def mapper(key, value):
    #do stuff to generate features

有没有方便的方法来确定打开的文件名并将其内容传递给mapper函数?

再次感谢。 -SAM

2 个答案:

答案 0 :(得分:1)

如果您能够访问作业配置属性,则mapreduce.job.input.file属性应包含当前文件的文件名。

我不确定你是如何在Dumbo / Mrjob中获得这些属性的 - 文档指定句点(在conf名称中)被替换为下划线,然后查看PipeMapRed.java的源代码,看起来像一切将单个作业conf属性设置为env变量 - 因此请尝试访问名为mapreduce_job_input_file的env变量

http://hadoop.apache.org/mapreduce/docs/r0.21.0/mapred_tutorial.html#Configured+Parameters

答案 1 :(得分:1)

如上所述here,您可以使用-addpath yes选项。

  

-addpath yes(将每个输入键替换为由相应输入文件和原始键的路径组成的元组)