2017-04-14 11 views
1

Java를 사용하여 거대한 파일의 단어 수를 계산하고 싶습니다. 단일 기계로 인해 맵 축소를 사용할 수 없습니다. 해시 맵을 사용하는 대신 Redis를 사용하여 단어 빈도를 저장하고 싶습니다. 실용적인 데이터가 흐르고 있습니다.Redis를 사용하여 거대한 파일의 단어 수에 대한 최적의 솔루션

내가 redis 정렬 된 각 집합에 대해 단어 개수를 밀어 넣을 것이라고 생각한 내용. 그러나 나는 이것이 최적의 해결책이 아니라는 것을 잘 모른다. 스트리밍 데이터의 단어를 세는 최적의 솔루션을 제공해주십시오. 단어에 대한

자바 코드 계산 -

public class WordCount { 
    public static void main(String args[]) { 
     Map<String, Integer> wordMap = wordMap("filename"); 
     List<Entry<String, Integer>> list = sortByValue(wordMap); 
     for (Map.Entry<String, Integer> entry : list) { 
      System.out.println(entry.getKey() + " => " + entry.getValue()); 

     } 
    } 

    public static Map<String, Integer> wordMap(String fileName) { 
     Map<String, Integer> wordMap = new HashMap<>(); 
     try (FileInputStream fis = new FileInputStream(fileName); 
       DataInputStream dis = new DataInputStream(fis); 
       BufferedReader br = new BufferedReader(new InputStreamReader(dis))) { 
      // words are separated by whitespace 
      Pattern pattern = Pattern.compile("\\s+"); 
      String line = null; 
      while ((line = br.readLine()) != null) { 
       line = line.toLowerCase(); 
       String[] words = pattern.split(line); 
       for (String word : words) { 
        if (wordMap.containsKey(word)) { 
         wordMap.put(word, (wordMap.get(word) + 1)); 
        } else { 
         wordMap.put(word, 1); 
        } 
       } 
      } 
     } catch (IOException ioex) { 
      ioex.printStackTrace(); 
     } 
     return wordMap; 
    } 

    public static List<Entry<String, Integer>> sortByValue(Map<String, Integer> wordMap) { 
     Set<Entry<String, Integer>> entries = wordMap.entrySet(); 
     List<Entry<String, Integer>> list = new ArrayList<>(entries); 
     Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() { 

      @Override 
      public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) 

      { 
       return (o2.getValue()).compareTo(o1.getValue()); 
      } 
     }); 
     return list; 
    } 
} 

답변

0

지도 자바 Redisson을 사용하여 레디 스 데이터를 이상 감소 실행하는 방법의 좋은 example 있습니다.