当前位置: 首页 > 知识库问答 >
问题:

如何在Hadoop程序的映射器中获取输入文件名?

叶修永
2023-03-14

如何在映射器中获取输入文件的名称?我有多个输入文件存储在输入目录中,每个映射器可能读取不同的文件,我需要知道映射器读取了哪个文件。

共有3个答案

欧阳英彦
2023-03-14

如果您使用的是Hadoop Streaming,那么可以在流作业的mapper/reducer中使用JobConf变量。

至于mapper的输入文件名,请参阅配置参数部分,map.input.file变量(map正在读取的文件名)是可以完成工作的。但请注意:

注意:在流作业的执行过程中,“mapred”参数的名称会被转换。点(.)变成下划线。例如,mapred。工作id变为mapred_job_id和mapred。jar变成mapred_jar。要在流作业的mapper/reducer中获取值,请使用带下划线的参数名称。

例如,如果您使用的是Python,那么您可以将这一行放在mapper文件中:

import os
file_name = os.getenv('map_input_file')
print file_name
澹台玉石
2023-03-14

在地图绘制程序中使用此选项:

FileSplit fileSplit = (FileSplit)context.getInputSplit();
String filename = fileSplit.getPath().getName();

编辑:

如果您想通过旧的API在configure()中执行此操作,请尝试以下操作:

String fileName = new String();
public void configure(JobConf job)
{
   filename = job.get("map.input.file");
}
柯子琪
2023-03-14

首先,需要使用较新的mapreduce API对输入进行拆分,具体操作如下:

context.getInputSplit();

但是为了获取文件路径和文件名,您需要首先将结果类型转换为FileSplit。

因此,为了获得输入文件路径,您可以执行以下操作:

Path filePath = ((FileSplit) context.getInputSplit()).getPath();
String filePathString = ((FileSplit) context.getInputSplit()).getPath().toString();

类似地,要获取文件名,可以只调用getName(),如下所示:

String fileName = ((FileSplit) context.getInputSplit()).getPath().getName();
 类似资料:
  • 我是hadoop新手,目前正在hadoop上工作。我有一个小问题。 我在输入文件夹中有大约10个文件,我需要将其传递给我的地图缩减程序。我希望我的映射器中的文件名称,因为我的文件名称包含创建此文件的时间。我看到人们使用FileSplit在映射器中获取文件名称。如果假设我的输入文件包含数百万行,那么每次调用映射器代码时,它都会获取文件名称,然后从文件中提取时间,对于同一个文件来说,这显然是一件重复耗

  • 我遇到了一个非常非常奇怪的问题。还原器确实工作,但如果我检查输出文件,我只能找到映射器的输出。当我尝试调试时,在将映射器的输出值类型从Longwritable更改为Text之后,我发现了与单词计数示例相同的问题 这是结果。 然后我在输出文件中发现了奇怪的结果。这个问题发生在我将map的输出值类型和reducer的输入键类型更改为Text之后,无论我是否更改了reduce输出值的类型。我还被迫更改j

  • 我是Hadoop的新手,但这是我上个月的一个学习项目。 为了使这一点足够模糊,以便对其他人有用,让我先抛出基本目标……假设: < li >显然,您有一个大型数据集,包含数百万个基本ASCII文本文件。 < ul > < li >每个文件都是一个“记录” e. g. /user/hduser/data/customer1/YYYY-MM-DD, /user/hduser/data/customer2

  • 我使用的是hadoop版本0.20和hadoop-core:1.2.0.jar 有没有可能使用新的hadoop API做到这一点?

  • 我正在从mapper生成两个输出文件。我使用Multipleoutput api生成两个输出。我不确定这样做是否正确。这是我的代码。。请仔细检查一下,给我你的建议。。当我运行代码时,我得到了一个错误:java。lang.NullPointerException。。 这是日志... 错误:java。com上的lang.NullPointerException。尼尔森。grfe。Export\u Co

  • 我正在学习Hadoop,并尝试执行我的Mapduce程序。所有Map任务和Reduce er任务都完成得很好,但Reducer将Mapper Output写入Output文件。这意味着根本没有调用Reduce函数。我的示例输入如下所示 预期输出如下所示 以下是我的计划。 这里问了同样的问题,我在reduce函数中使用了Iterable值作为该线程中建议的答案。但这并不能解决问题。我不能在那里发表评