Jak analizować pliki PDF w programach zmniejszających mapę?
Chcę parsować pliki PDF w moim programie hadoop 2.2.0 i znalazłemto, śledziłem to, co mówi i do tej pory mam te trzy klasy:
PDFWordCount
: główna klasa zawierająca mapę i zmniejsza funkcje. (tak jaknatywna liczba słów hadoop próbka ale zamiastTextInputFormat
Użyłem mojegoPDFInputFormat
klasa.PDFRecordReader extends RecordReader<LongWritable, Text>
: Jaka jest główna praca tutaj. Szczególnie umieściłem mojeinitialize
funkcja tutaj, aby uzyskać więcej ilustracji.
public void initialize(InputSplit genericSplit, TaskAttemptContext context)
throws IOException, InterruptedException {
System.out.println("initialize");
System.out.println(genericSplit.toString());
FileSplit split = (FileSplit) genericSplit;
System.out.println("filesplit convertion has been done");
final Path file = split.getPath();
Configuration conf = context.getConfiguration();
conf.getInt("mapred.linerecordreader.maxlength", Integer.MAX_VALUE);
FileSystem fs = file.getFileSystem(conf);
System.out.println("fs has been opened");
start = split.getStart();
end = start + split.getLength();
System.out.println("going to open split");
FSDataInputStream filein = fs.open(split.getPath());
System.out.println("going to load pdf");
PDDocument pd = PDDocument.load(filein);
System.out.println("pdf has been loaded");
PDFTextStripper stripper = new PDFTextStripper();
in =
new LineReader(new ByteArrayInputStream(stripper.getText(pd).getBytes(
"UTF-8")));
start = 0;
this.pos = start;
System.out.println("init has finished");
}
(Możesz zobaczyć mojesystem.out.println
s do debugowania. Ta metoda kończy się niepowodzeniemgenericSplit
doFileSplit
. Ostatnią rzeczą, jaką widzę w konsoli, jest to:
hdfs://localhost:9000/in:0+9396432
który jestgenericSplit.toString()
PDFInputFormat extends FileInputFormat<LongWritable, Text>
: co po prostu tworzynew PDFRecordReader
wcreateRecordReader
metoda.
Chcę wiedzieć, jaki jest mój błąd?
Czy potrzebuję dodatkowych zajęć lub czegoś takiego?