gpt4 book ai didi

java - 运行 Hadoop MapReduce 作业时如何获取文件名/文件内容作为 MAP 的键/值输入?

转载 作者:可可西里 更新时间:2023-11-01 14:18:18 24 4
gpt4 key购买 nike

我正在创建一个程序来分析 PDF、DOC 和 DOCX 文件。这些文件存储在 HDFS 中。

当我开始我的 MapReduce 作业时,我希望 map 函数将文件名作为键,将二进制内容作为值。然后我想创建一个流阅读器,我可以将其传递给 PDF 解析器库。如何实现映射阶段的键/值对是文件名/文件内容?

我正在使用 Hadoop 0.20.2

这是启 Action 业的旧代码:

public static void main(String[] args) throws Exception {
JobConf conf = new JobConf(PdfReader.class);
conf.setJobName("pdfreader");

conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);

conf.setMapperClass(Map.class);
conf.setReducerClass(Reduce.class);

conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(TextOutputFormat.class);

FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));

JobClient.runJob(conf);
}

我知道还有其他输入格式类型。但是有没有一个完全符合我的要求?我发现文档很模糊。如果有的话,那么 Map 函数的输入类型应该是什么样子的?

提前致谢!

最佳答案

对此的解决方案是创建您自己的 FileInputFormat 类来执行此操作。您可以访问此 FileInputFormat 接收的 FileSplit 中的输入文件的名称 (getPath)。请务必否决 FileInputformat 的 isSplitable 以始终返回 false。

您还需要一个自定义 RecordReader,它将整个文件作为单个“Record”值返回。

处理太大的文件时要小心。您将有效地将整个文件加载到 RAM 中,而任务跟踪器的默认设置是只有 200MB RAM 可用。

关于java - 运行 Hadoop MapReduce 作业时如何获取文件名/文件内容作为 MAP 的键/值输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5716138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com