Java 访问和/或存储大型数据集
目前,我正在处理大量用于计算的浮点/双精度数据集。我有一组文件来比较数据a和数据B,我想计算欧几里德距离/余弦相似性。即,数据A点1通过数据B点进行迭代,以找到最近的邻居 数据在文本文件中给出-没有问题。存储/读取信息的理想方式是什么 我必须对数据A中的所有点重复数据B。数据将作为浮点存储。每个数据点可能都有尺寸。一个文件最多可以包含大约2mil浮点 我是否应该开始使用:Java 访问和/或存储大型数据集,java,dataset,large-data-volumes,Java,Dataset,Large Data Volumes,目前,我正在处理大量用于计算的浮点/双精度数据集。我有一组文件来比较数据a和数据B,我想计算欧几里德距离/余弦相似性。即,数据A点1通过数据B点进行迭代,以找到最近的邻居 数据在文本文件中给出-没有问题。存储/读取信息的理想方式是什么 我必须对数据A中的所有点重复数据B。数据将作为浮点存储。每个数据点可能都有尺寸。一个文件最多可以包含大约2mil浮点 我是否应该开始使用: 不断地读取数据B的文件并解析字符串(我觉得这是非常低效的) 将数据存储在列表(浮点数组)中 使用内存映射IO HashMap
基本解决方案是最好的:只需一个
float[][]
。这几乎可以肯定是内存效率最高、速度最快的解决方案,而且非常简单。2M浮点值一点也不多,将它们全部放在一个列表中就可以了。一个列表用于A,一个列表用于B。如果A和B是多维的,则float[][]就可以了。如果发现内存不足,请先尝试加载整个B,但每次只加载A中的一个数据点。我不明白为什么一个简单的float[][]
数组在这里不起作用。你似乎比我更擅长数学,所以如果将float存储在数组中,请尝试估计所需的内存:float是4字节,你有两百万个。这就产生了800万字节:8Mbs。储存在记忆中的花生。即使数据结构更需要内存,并且将每个浮点所需的内存乘以10,它仍然只能产生80Mbs。还是微不足道的。哦,我忘了添加数据集中的点可能会丢失,从而使数据集不完整。因此,我要么1)浏览文件,找到最大维度和类别2)使用列表。实际上,您认为在创建已确认和定义的2D数组或使用列表之前扫描一次文件会减少哪些开销?很抱歉,我遗漏了导致上述问题的其他信息,如果您能解释一下,我们将不胜感激。或者,我遗漏了导致上述问题的其他信息,如果你能解释一下,我会很感激的