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

Hadoop:只在映射器中获取一次输入文件名

凌声
2023-03-14

我是hadoop新手,目前正在hadoop上工作。我有一个小问题。

我在输入文件夹中有大约10个文件,我需要将其传递给我的地图缩减程序。我希望我的映射器中的文件名称,因为我的文件名称包含创建此文件的时间。我看到人们使用FileSplit在映射器中获取文件名称。如果假设我的输入文件包含数百万行,那么每次调用映射器代码时,它都会获取文件名称,然后从文件中提取时间,对于同一个文件来说,这显然是一件重复耗时的事情。一旦我在映射器中获得时间,我就不必一次又一次地从文件中分配时间。

我如何才能实现这一点?

共有1个答案

孟楷
2023-03-14

您可以使用Mapper的setup方法来获取文件名,因为setup方法在map()方法初始化之前只需运行一次:

java prettyprint-override">public class MapperRSJ extends Mapper<LongWritable, Text, CompositeKeyWritableRSJ, Text> {
  String filename;

  @Override
  protected void setup(Context context) throws IOException, InterruptedException {
    FileSplit fsFileSplit = (FileSplit) context.getInputSplit();
    filename = context.getConfiguration().get(fsFileSplit.getPath().getParent().getName()));
  }

  @Override
  public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
    // process each key value pair
  }
}
 类似资料:
  • 如何在映射器中获取输入文件的名称?我有多个输入文件存储在输入目录中,每个映射器可能读取不同的文件,我需要知道映射器读取了哪个文件。

  • 我遇到了一个非常非常奇怪的问题。还原器确实工作,但如果我检查输出文件,我只能找到映射器的输出。当我尝试调试时,在将映射器的输出值类型从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

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

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

  • 在java中,我会使用: 多输入.add输入路径(conf, path, inputFormatClass, 映射器类) 以添加多个输入,并为每个输入使用不同的映射器。 现在我正在使用python在hadoop中编写一个流作业,可以做类似的工作吗?