Java加载和处理大数据

时间:2014-03-22 07:23:38

标签: java file-io bigdata

我有几个大数据(每个1G)文件包含人的信息(只是姓名和电话号码)。格式清晰灵活。问题是加载并处理它们。处理其中一个可能仍然可行但如果我想在特定目录下处理它们,事情变得棘手。当我使用

 File file = chooser.getSelectFile();

并获取一个目录,我认为下一步是将文件放在文件数组中:

 File[] files = file.ListFile();  

但这会导致问题吗?由于每个文件都是1G,因此VM的内存不会将所有这些文件保存在一起。为了以后搜索它们,我想我可能想先对它们进行排序。如何对这些单个文件进行排序?由于总大小如此之大,我们的想法是:将它们放入像A.txt,B.txt这样以文字A和B开头的文件是不够的。

3 个答案:

答案 0 :(得分:1)

文件只代表文件名,而不是内容。除非每个目录有数千个文件,否则你还没有做任何事情来使用大量内存。

不要尝试通过将每个文件完全加载到内存中来处理这些文件。

答案 1 :(得分:0)

File仅存储文件句柄,而不存储文件本身的内容。只有当您打开该文件并读取其内容时,该文件的内容才会在Java堆上结束。

我建议您在阅读时使用InputStream并处理文件内容,而不是将整个文件加载到内存中然后进行处理。

答案 2 :(得分:0)

如果您的主存储器无法容纳大量数据,则可以开始使用辅助存储器。所以问题归结为你想用名字和电话号码做什么。

假设您有100个随机放置姓名和电话号码的文件,您需要程序快速查找姓名的电话号码。理想的方法是创建一个名称和电话号码为HashMap的值。但由于您的内存无法保存整个内容,因此您可能需要考虑以更好的方式将数据存储在辅助内存中。例如,所有以A开头的名称都将它们存储在名为A.txt的文件中,所有以B开头的名称都将存储在B.txt中,依此类推。

现在,当您想要搜索名称时,找到起始字符并查看相应的文件。