【发布时间】:2013-01-10 00:56:12
【问题描述】:
我正在对大型数据集实施聚类算法。数据集位于文本文件中,包含超过 1 亿条记录。每条记录包含 3 个数字字段。
1,1503895,4
3,2207774,5
6,2590061,3
...
如果可能,我需要将所有这些数据保存在内存中,因为根据我的聚类算法,我需要随机访问此文件中的记录。因此,我无法执行Find duplicates in large file 中所述的任何分区和合并方法
这个问题有哪些可能的解决方案?我可以使用 ehcache 之类的缓存技术吗?
【问题讨论】:
-
用大量内存设置虚拟机?除此之外...
-
文本文件有多大?使用适合的数据类型。看起来像一个字节,整数,字节?
-
我和@SJuan76 在一起。听起来您的数据集在 ~1-2GB 范围内(将每个字段表示为一个 int),这是大多数体面的机器所拥有的。有关如何设置 JVM 最大堆大小的信息,请参阅 stackoverflow.com/questions/2294268/…。
-
或者,如果要进行一些预处理,您可以:a) 确保所有记录的长度相同(以字节为单位)以使用
RandomAccessFile读取每条记录(不知道如何效率将是,也许它取决于FS);或 b) 将数据划分为 100 条记录(左右)的块,要读取记录 2050,您需要打开文件 200 并读取第 50 条记录。
标签: java large-files