Skip to content

文件排序

quhongwei edited this page Mar 28, 2018 · 1 revision

组件可以根据文件一个或者几个字段来对文件记录进行排序

排序后可以是有序的分片文件,也可以合成一个完整的有序文件

一:单文件排序

        // filePath指定排序原始文件路径
        FileConfig config = new FileConfig(
            filePath,
            "/sort/template/ccbgold_balance_new_template.json", new StorageConfig("nas"));

        FileSorter fileSorter = FileFactory.createSorter(config);
        // sortTempPath指定排序临时路径存放地址
        // executor 指定排序使用的线程池
         // 这里设置合成一个完整文件
        SortConfig sortConfig = new SortConfig(sortTempPath, SortTypeEnum.ASC, executor,
            ResultFileTypeEnum.FULL_FILE_PATH);
        sortConfig.setResultFileName("testSort");
        sortConfig.setSliceSize(1024);  // 排序时分片大小
        sortConfig.setSortIndexes(new int[] { 0, 1 }); // 排序字段索引

        SortResult sortResult = fileSorter.sort(sortConfig);

二:多文件排序

文件路径数组通过SortConfig指定

        String sortTempPath = temporaryFolder.getRoot().getAbsolutePath();
        FileConfig fileConfig = new FileConfig("/multiFilesSort/de/de.json",
            new StorageConfig("nas"));
        // 设置排序
        fileConfig.setType(FileCoreToolContants.PROTOCOL_MULTI_FILE_SORTER);

        FileSorter fileSorter = FileFactory.createSorter(fileConfig);
        SortConfig sortConfig = new SortConfig(sortTempPath, SortTypeEnum.ASC, executor,
            ResultFileTypeEnum.FULL_FILE_PATH);
        sortConfig.setResultFileName("testSort");
        sortConfig.setSliceSize(1024);
        sortConfig.setSortIndexes(new int[] { 0, 1 });
        String[] sourceFilePaths = new String[3];
        sourceFilePaths[0] = File.class.getResource("/multiFilesSort/de/data/de1.txt").getPath();
        sourceFilePaths[1] = File.class.getResource("/multiFilesSort/de/data/de2.txt").getPath();
        sourceFilePaths[2] = File.class.getResource("/multiFilesSort/de/data/de3.txt").getPath();
        sortConfig.setSourceFilePaths(sourceFilePaths);

        SortResult sortResult = fileSorter.sort(sortConfig);