如何获取hadoop mapper
中Hadoop Pipes?
正在执行的 输入文件 名称
我可以轻松地在基于java的地图缩减器中获取文件名,如
FileSplit fileSplit =(FileSplit)context.getInputSplit();串 filename = fileSplit.getPath()。getName();的System.out.println(“文件 名称“+ filename”; System.out.println(“目录和 。文件名“+ fileSplit.getPath()的toString());
但我怎样才能进入C ++;
Plz帮帮我
由于
答案 0 :(得分:3)
对于流/管道作业,作业配置被序列化以处理环境变量。
定义输入文件的作业配置属性名为map.input.file
。启动C ++程序的PipeMapRed类负责此序列化(configure
方法,第151行),并确保转义作业conf属性名称(addJobConfToEnvironment
方法行206/266 ) - 意味着所有非a-Za-z0-9
字符都被替换为下划线(safeEnvVarName
方法,第276/284行) - 因此,您在c ++程序中寻找的实际环境变量将被命名为{{1 }}
我不是c ++程序员,所以我不能告诉你如何获取环境变量,但我确信它很简单。
答案 1 :(得分:0)
想出如何在Python中执行此操作:
import os
filename = os.environ['map_input_file']
filename是您想要的变量 - 这将为您提供映射器正在处理的文件名。
其他一些有用的环境变量是:
答案 2 :(得分:0)
我一直在努力解决同样的问题。我找到了解决方案。
void map(HadoopPipes::MapContext& context) {
string path;
path = context.getInputSplit();
path.erase(path.end()-1);
}
我只发布了阅读文件名部分。 getInputSplit()方法返回文件的整个路径+最后一些未知字符。我想要文件的纯路径,所以删除字符串的结束字符。我不知道为什么将weired字符添加到字符串的末尾但是只是通过删除结束字符来使用它!〜
答案 3 :(得分:0)
如果您在Python中使用 HADOOP 2.x :
file_name = os.environ['mapreduce_map_input_file']
答案 4 :(得分:0)
通过解析mapreduce_map_input_file
(新)或 (不建议使用)环境变量,您可以获取地图输入文件名。 map_input_file
注意:
这两个环境变量是区分大小写,所有字母都应该是小写。
答案 5 :(得分:0)
下面的代码将能够打印文件名
filepath = os.environ['mapreduce_map_input_file']
filename = os.path.split(filepath)[-1]
print filename