我正在创建一个程序来分析PDF,DOC和DOCX文件。这些文件存储在HDFS中。
当我开始MapReduce作业时,我希望map函数将Filename作为键,将Binary
Contents作为值。然后,我想创建一个流阅读器,可以将其传递给PDF解析器库。如何实现映射阶段的键/值对是文件名/文件内容?
我正在使用Hadoop 0.20.2
这是开始工作的旧代码:
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);
}
我知道还有其他inputformat类型。但是,有没有一种正是我想要的?我发现文档含糊不清。如果有一个可用的,那么Map函数输入类型应该如何显示?
提前致谢!
解决方案是创建自己的FileInputFormat类来执行此操作。您可以从此FileInputFormat接收的FileSplit(getPath)访问输入文件的名称。确保否决FileInputformat的isSplitable以始终返回false。
您还将需要一个自定义的RecordReader,它以单个“ Record”值返回整个文件。
处理太大的文件时要小心。您将有效地将整个文件加载到RAM中,并且任务跟踪器的默认设置是仅具有200MB RAM。
当试图安排作业时,我们需要来自Azkaban的作业名称。有什么内置属性吗?我们从获取流名称。 我的工作文件是:
问题内容: 我下载了文件作为ajax的响应。如何从内容处置中获取文件名和文件类型并显示其缩略图。我有许多搜索结果,但找不到正确的方法。 控制台输出: 问题答案: 这是我有时使用它的方式。我假设您将附件作为服务器响应提供。 我从REST服务中这样设置响应头 编辑:编辑答案以适合您的问题-使用单词代替
问题内容: 我在AWS Athena中创建了用于查询S3数据的外部表,但是位置路径中有1000多个文件。因此,我需要将记录的相应文件名显示为表中的一列。 简而言之,我需要了解AWS Athena Presto中等效的INPUT__FILE__NAME(hive)或任何其他实现此目的的方法。 问题答案: 您可以使用$ path伪列执行此操作。
问题内容: 我只是想到了一种不那么直截了当的方法: 我可以以某种方式将JAR资源列表转换为内部JAR URL列表,然后可以使用openConnection()打开它。 问题答案: 您使用JarFile打开一个Jar文件。有了它,您可以使用’getEntry(String name)’或’entires’来获取ZipEntry或JarEntry(它们可以看作同一东西)。收到条目后,可以通过调用’ J
当我使用相对路径时,我可以从Eclipse运行Java程序。但是,当我将其作为JAR文件运行时,该路径不再有效。在我的src/components/SettingsWindow中。我有:
我正在处理一个目录内的大量文件。我想在已处理数据输出的元数据中添加文件名。这样,如果在处理过程中出现错误,我们可以检查处理记录的输入文件是什么。