Ich erstelle ein Programm zur Analyse von PDF-, DOC- und DOCX-Dateien. Diese Dateien sind im HDFS gespeichert.
Wenn ich meinen MapReduce-Auftrag starte, soll die Map-Funktion den Dateinamen als Schlüssel und den Binärinhalt als Wert haben. Dann möchte ich einen Stream-Reader erstellen, den ich an die PDF-Parser-Bibliothek übergeben kann. Wie kann ich erreichen, dass das Schlüssel/Wert-Paar für die Map-Phase Dateiname/Dateiinhalt lautet?
Ich verwende Hadoop 0.20.2
Dies ist ein älterer Code, der einen Auftrag startet:
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);
}
Ich weiß, dass es andere Eingabeformate gibt. Aber gibt es einen, der genau das tut, was ich will? Ich finde die Dokumentation ziemlich vage. Wenn es einen gibt, wie sollten dann die Eingabetypen der Map-Funktion aussehen?
Vielen Dank im Voraus!