有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用Redis计算大文件字数的java最佳解决方案

我想用java计算一个大文件的字数。由于只有一台机器,我不能使用map reduce。我想用Redis来存储单词的频率,而不是使用哈希映射。实际上,数据是源源不断的

我所想的是,我将推送redis排序集中每个词的字数。但我不知道这是不是最好的解决方案。请提供最佳解决方案来计算流媒体数据的字数

用于字数统计的Java代码-

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;
    }
}

共 (1) 个答案

  1. # 1 楼答案

    关于如何使用{a2}在Java上的Redis数据上执行Map Reduce,有一个很好的{a1}