2012-12-01 4 views
0

단어 계산을 위해 hadoop 축소기를 구현하고 싶습니다. 내 감속기에서는 해시 테이블을 사용하여 단어 수를 계산합니다.하지만 내 파일이 매우 큰 경우 해시 테이블은 극도의 메모리를 사용합니다. 어떻게이 문제를 해결할 수 있습니까? (예 : 각 감속기가 1,000 만 줄의 파일이 1 억 개의 단어를받는 파일) 해시 테이블에 1 억 개의 키가 필요하다는 단어를 계산하는 방법은 무엇입니까? 현재 구현 된 방식은 Python입니다. 메모리를 줄이는 효과적인 방법이 있습니까?대용량 파일을위한 효율적인 하둡 워드 계산

+0

누락 된 부분이 있습니까? 그러나 단어를 셀 수만 있다면 해시 테이블을 100m 오래 필요가 없습니다. 반복을 많이 할 것입니다. 예를 들어 'the'라는 단어에 대해 250,000 개의 항목을 얻을 수 있습니다. 'collections.Counter'를 증가시키는 함수를 통해 라인별로 데이터를 스트리밍 할 수 없습니까? – kreativitea

+0

죄송합니다. 실수로 100Milion의 뚜렷한 단어를 원한다면 해시 테이블에 100 만 개의 항목이 필요하다고 말하고 싶습니다. – nikosdi

+3

1 억 개의 별개 단어가 있습니까? http://oxforddictionaries.com/words/how-many-words-are-there-in-the-english-language –

답변

0

가장 효과적인 방법은 매퍼에서 단어 빈도의 해시지도를 유지하고 특정 크기 (예 : 100,000 개 항목)에 도달하면 출력 문맥으로 플러시하는 것입니다. 그런 다음지도를 지우고 계속하십시오 (지도 정리 방법으로지도를 플러시하는 것을 잊지 마십시오).

여전히 100 만 단어가 있다면, 당신은 감속기가 끝날 때까지 오랜 시간을 기다리거나 클러스터 크기를 늘리고 더 많은 감속기를 사용해야합니다.

+0

좋아, 나는 지금까지 매퍼에서 결합기를 사용하고있다.하지만 내 감속기가 메모리에 들어갈 수있는 것보다 더 뚜렷한 단어를 받으면 나는 계속이 문제를 안고있다. 이것은 더 큰 Haddop 클러스터를 사는 대답의 일부입니다! ;) – nikosdi

+1

감속기에 도달하면 모든 것을 메모리에 저장할 필요가 없습니다. 물론 각 키와 출력에 대한 카운트를 추가하면됩니다. 감속기에 해시 맵을 유지하려면 어떻게해야합니까? –

+0

감속기는 매퍼 A1과 A2에서 단어 A를받을 수 있습니다. 감속기는 또한 카운트를 수행해야합니다 ....... A1은 {N, 100}을 보내고 A2는 {N, 100}을 전송합니다 ... – nikosdi

관련 문제