Я создаю программу для анализа файлов PDF, DOC и DOCX. Эти файлы хранятся в HDFS.
Когда я запускаю свою работу MapReduce, я хочу, чтобы функция карты имела имя файла в качестве ключа и двоичное содержимое в качестве значения. Затем я хочу создать потоковую программу чтения, которую я могу передать в библиотеку парсера 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?
Заранее спасибо!