如何从R中的流mapreduce作业中获取文件名?

Jas*_*son 4 filenames hadoop r environment-variables hadoop-streaming

我正在流式传输R mapreduce作业,我需要获取文件名.我知道Hadoop在启动之前为当前作业设置环境变量,我可以使用Sys.getenv()访问R中的env变量.

我发现: 在流式传输hadoop程序中获取输入文件名

和Sys.getenv(mapred_job_id)工作正常,但它不是我需要的.我只需要文件名而不是作业ID或名称.我还发现:如何在EC2上运行mapreduce作业时获取文件名?

但这也没有用.从R流式传输时获取当前文件名的最简单方法是什么?谢谢

cab*_*bad 6

我没有试过这个,但是从你提供的第二个链接看来,这可以在一个名为的环境变量中使用map.input.file.然后,这应该工作:

Sys.getenv("map.input.file")
Run Code Online (Sandbox Code Playgroud)

编辑:经过进一步调查,我了解到你需要用下划线替换点,所以这是这样做的方法:

Sys.getenv("map_input_file")
Run Code Online (Sandbox Code Playgroud)

但是,map.input.file属性已在YARN(Hadoop 2.x)中弃用,因此应使用新名称:

Sys.getenv("mapreduce_map_input_file")
Run Code Online (Sandbox Code Playgroud)

  • 我想到了."map_input_file"工作正常,但它返回完整路径,这导致事情中断,这就是我的工作崩溃的原因.谢谢你的帮助. (2认同)