Hazelcast外部排序。在大型csv中对记录进行排序

Hazelcast外部排序。在大型csv中对记录进行排序,csv,sorting,hazelcast,hazelcast-jet,Csv,Sorting,Hazelcast,Hazelcast Jet,我有一个用例,需要对一个巨大的csv文件(比如1000万条记录)进行排序,然后将结果写入另一个文件。在RAM有限的情况下,hazelcast jet/hazelcast是否提供任何此类外部分拣功能。我目前正致力于将此功能作为我的hazelcast jet GSoC项目的一部分引入。 我使用了我之前开发的RocksDB状态后端功能来进行排序,因此您可以对大于内存的数据集进行排序。 它当前用于批处理用例,并在您调用的管道中使用BatchStage.sort(keyFn)其中keyFn提取要排序的键。

我有一个用例,需要对一个巨大的csv文件(比如1000万条记录)进行排序,然后将结果写入另一个文件。在RAM有限的情况下,hazelcast jet/hazelcast是否提供任何此类外部分拣功能。

我目前正致力于将此功能作为我的hazelcast jet GSoC项目的一部分引入。 我使用了我之前开发的RocksDB状态后端功能来进行排序,因此您可以对大于内存的数据集进行排序。 它当前用于批处理用例,并在您调用的管道中使用
BatchStage.sort(keyFn)
其中
keyFn
提取要排序的键。
你可以看到这上面的代码,1000万条记录什么都不是。我怀疑你在这里真正需要的是黑兹卡斯特。使用unix附带的sort命令:

 sort --field-separator=',' --key=2 source.csv > target.csv
您可以使用如下Java代码包装此命令:

Process sortProcess = Runtime.getRuntime().exec(cmd);

如果您坚持使用Hazelcast,则需要保持较低的内存占用。保留除按字节数组排序的列之外的所有内容。

您可以使用自定义处理器进行排序,但这是一种高级用法。通过使用内置功能,目前还不可能(Jet 4.2)。