2012-08-08 6 views
0

파일에 수백만 개의 레코드가 있습니다. 파일의 모든 행 (레코드)에 하나의 사용자 ID와 해당 URL (문자열)이 있습니다. 파일에서 가장 많이 방문한 1000 개의 URL (문자열)을 찾아야합니다.파일에서 가장 많이 방문한 URL 찾기

Java 응용 프로그램을 사용하여이 작업을 수행해야합니다. 최상의 접근 방법은 무엇입니까?

+3

무슨 문제 "COUNT (*)로 URL의 순서로 방문 그룹에서 SELECT COUNT (*), URL '는 SQL과 같은 쿼리 데이터를 검색? 모든 줄을 읽고 URL을 추출하고 횟수를 계산하십시오. – alex

+1

나에게 전형적인 map-reduce 문제로 들립니다. –

+0

@alex : 멀티 세트와 함께 잘 사용하면 여러 URL의 수를 추적 할 수 있습니다. – oldrinb

답변

1

하지 자바하지만 레코드 : 키로서 URL과

$ cat records.txt 
user1 http://example.com/ 
user2 http://example.com/ 
user2 http://example.com/some/path 
user1 http://example.com/yet/another path 

$ cut -d" " -f2 < records.txt | sort | uniq -c | sort -n -r | head -1000 
+0

+1 자바에서 실행할 수 있습니다. –

0

지도하고, 값이 확실히 간단한 방법 (예컨대, HashMap<String, Integer>) 그대로 수입니다. 라인을 읽을 때마다 카운트를 증가시킵니다.

상위 1000 개를 가져 오려면 모든 항목을 TreeSet에 던집니다. 사용자 입력 Comparator은 항목 값을 정렬합니다. 그런 다음 세트의 처음 1000 개 항목을 덤프합니다.

"수백만 개"의 레코드에서 작동합니다. 하지만 수십억 개의 레코드가 있거나 심지어는 수억 개의 레코드가 있으면 문제가 발생할 수 있습니다. 모든 것이 메모리에서 완료되기 때문입니다.

0

는 데이터베이스에 삽입 한 후 자세히

관련 문제