Hadoop의지도 축소 프로그램에서 HDFS로 PDF 파일을 구문 분석해야합니다. 그래서 입력을으로 나누어 HDFS에서 PDF 파일을 얻습니다.이 파일은 구문 분석되어 매퍼 클래스로 보내야합니다. 이 InputFormat을 구현하기 위해 나는 link을 통과했다. 이러한 입력 분할은 어떻게 파싱되어 텍스트 형식으로 변환 될 수 있습니까?Hadoop지도에서 PDF 파일 구문 분석
답변
하둡에서 PDF 파일 처리는 FileInputFormat 클래스를 확장하여 수행 할 수 있습니다. 그것을 확장하는 클래스가 WholeFileInputFormat이되도록하십시오. WholeFileInputFormat 클래스에서 getRecordReader() 메서드를 재정의합니다. 이제 각 PDF는 개별 입력 스플릿으로 수신됩니다. 그러면이 개의 개별 스플릿을 구문 분석하여 텍스트를 추출 할 수 있습니다. 이 link은 FileInputFormat을 확장하는 방법을 이해하는 명확한 예를 제공합니다.
분할에 따라 다릅니다. 나는 (잘못 될 수있다) 당신이 그것을 파싱하기 위해서 전체적으로 각 PDF를 필요로한다고 생각한다. 이를 수행 할 Java 라이브러리가 있으며 Google은 그 위치를 알고 있습니다.
그렇다면 파싱 할 준비가되었을 때 파일을 전체적으로 가지고 있어야하는 접근 방식을 사용해야합니다. 매퍼에서 그렇게하고 싶다고 가정하면 전체 파일을 매퍼로 넘기는 독자가 필요합니다. 자신의 독자를 써서이 일을 할 수도 있고, 이미 거기에있는 독자가있을 수도 있습니다. PDF의 디렉토리를 스캔하고 각 파일의 이름을 매퍼로 키로, 내용을 값으로 전달하는 독자를 만들 수 있습니다.
CombileFileInput 형식 대신 WholeFileInput 형식을 구현하면 문제가 해결됩니다. 따라서 WholeFileInput 형식에서 각 PDF 파일은 단일 입력 분할로 수신됩니다. 그런 다음 이러한 입력 분할은 완전히 구문 분석 될 수 있습니다. – WR10
또한 전체 파일을 단일 분할로 구문 분석 할 때 읽을 파일의 크기가 병목 현상이되지 않습니까? 크기가 TB 인 파일을 생각해보고 단일 파일이 있으면 단일 컴퓨터에서 강제로 파싱해야합니다. 어떻게이 병목 현상을 극복 할 수 있습니까? – WR10
음, 먼저 PDF를 전체적으로 분석해야하는 경우가 있는지 알아보십시오. 그렇지 않은 경우 문제가 해결됩니다. 당신이 그것을 분해 할 수 없다고 가정하면 파일 이름을 스플릿으로 전달해야하며 매퍼의 HDFS에서 직접 읽어야한다고 생각합니다. –
이 답변은 찾고자하는 것의 일부일 수 있습니다 : http://stackoverflow.com/a/9298965/698839 –