Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java排序和csv:处理海量数据的良好实践_Java_Sorting_Csv_Memory Management - Fatal编程技术网

Java排序和csv:处理海量数据的良好实践

Java排序和csv:处理海量数据的良好实践,java,sorting,csv,memory-management,Java,Sorting,Csv,Memory Management,我需要订购一个巨大的csv文件(1000万条以上的记录),其中有几种Java算法,但我的内存量有一些问题 基本上,我有一个巨大的csv文件,其中每个记录有4个字段,具有不同的类型(字符串、int、double)。 我需要将这个csv加载到一些结构中,然后按所有字段对其进行排序 我的想法是:编写一个记录类(带有自己的字段),开始逐行读取csv文件,为每行创建一个新的记录对象,然后将它们放入ArrayList。然后为每个字段调用我的分类器算法 它不起作用。。当我尝试将所有记录对象加载到我的Array

我需要订购一个巨大的csv文件(1000万条以上的记录),其中有几种Java算法,但我的内存量有一些问题

基本上,我有一个巨大的csv文件,其中每个记录有4个字段,具有不同的类型(字符串、int、double)。 我需要将这个csv加载到一些结构中,然后按所有字段对其进行排序

我的想法是:编写一个记录类(带有自己的字段),开始逐行读取csv文件,为每行创建一个新的记录对象,然后将它们放入ArrayList。然后为每个字段调用我的分类器算法

它不起作用。。当我尝试将所有记录对象加载到我的ArrayList中时,我得到并OutOfMemoryException

通过这种方式,我创建了大量的对象,我认为这不是一个好主意。 当我有如此大量的数据时,我应该怎么做?哪种方法/数据结构在内存使用方面更便宜

我的观点是使用排序ALG并查看它们如何处理大数据集,将排序结果保存到文件中并不重要

我知道csv有一些LIB,但我应该在没有外部LIB的情况下实现它


非常感谢D

我会在内存模式下使用内存中数据库,比如h2(jdbc:h2:mem:
因此,所有内容都保留在ram中,不会刷新到光盘中(前提是您有足够的ram,否则可能需要使用基于文件的url)。在其中创建表格,并从csv中写入每一行。如果您正确设置了索引,那么使用标准sql进行排序和分组将轻而易举(取决于文件大小),并查看合并排序。这样,您甚至可以在不使用大量内存的情况下对大文件进行排序,而这正是数据库在进行大排序时所使用的方法。

您是否尝试为JVM分配更多内存?还没有,但这是一个好主意?我的意思是,有没有其他方法可以减少内存使用?更有效的数据结构,更好的存储csv文件字段的方法。。。我想了想,什么也没找到,但我是java的新手,也许我遗漏了什么:)。谢谢给JVM更多内存不是个坏主意,除非您的资源有限。至于数据结构的效率:这在很大程度上取决于您使用的数据。如果没有看到一些数据,我们不可能给你任何答案或提示。您可能需要提供一些示例;)这是一个标准的csv文件,每个字段用逗号分隔,每行/记录结尾用“,”,“,”,有大约1500万条记录,重点是将此文件加载到某种结构中,然后按每个字段使用不同的排序算法对其进行排序。这只是出于学术目的,在真实环境中,您可能永远不需要订购如此大的数据,我应该只使用java,而不使用其他外部LIB或工具(如下面另一位用户建议的[无论如何,谢谢]),当然,也不使用任何内置java排序算法(如果存在)。谢谢,好主意,但我应该使用java标准libs,而不是像db ecc这样的外部工具。我认为有很多可能性,但这只是为了学术目的,重点是学习和了解排序是如何工作的,哪一种更好,在这种情况下ecc:)。无论如何谢谢你