请帮我创建一个高大数组从大的二进制文件和“fileDatastore”而不会耗尽内存。

10视图(30天)
我有一个大的数据文件(具体文件我现在使用~ 60 gb,尽管几百gb是典型的),我想创建一个高的数组。我希望这将使我快速执行计算的数据没有加载到内存中。自定义的数据格式,所以看起来我坚持使用自定义“fileDatastore”格式。
使数据存储并不是一个问题,但是每次我试着和加载它耗尽内存页面文件(已经使我的页面文件尽可能大的Windows上10)。这个问题似乎是Matlab需要暂时加载前的完整的数据存储到内存中高大的数组。将(据说)后释放的内存文件完全阅读,但它从来没有得到。这是由于我无法找到任何方式告诉“fileDatastore”只有一次读取的数据。在其他类型的数据存储有一个“ReadSize”属性,似乎这样做,但这是fileDatastore缺少有效的选项。@readfcn我使用设置(部分正确读取数据(我可以很容易地告诉它从当前位置读取下一个X值),我只是不知道如何使fileDatastore传递第二个参数,这些信息(第一个参数是文件名)。
我想象我可以手动数据分解成单独的数据存储,然后combione每个高到相同的数组,但这1)将是相当乏味的每次我想我们fileDatastore,和2)我想这将推迟执行功能产生负面影响,因为(我猜)matlab将尝试任何优化从每个小sub-datastore分别读取数据而不是优化整个数据文件。因此,我宁愿找一个方法从单一fileDatastore。
PS如果任何MathWorks人员认为这-请建议开发团队来解决这个问题。授予我使用个人电脑,不是一些集群移植版的内存,但它是荒谬的,电脑的i7 + 16 gb的ram和Matlab的“最新、最好的大数据解决方案”不能设法处理~ 60 gb文件没有撞电脑....我不能想象它会有人(熟悉源代码)超过几个小时来添加一个选项的“通过这个号码你的读函数来决定多少钱应该在给定的时间阅读”(或类似的)。
1评论
希拉勒喀
希拉勒喀 2018年12月6日
编辑:希拉勒喀 2018年12月6日
你的大生成二进制文件如何?同样值得评估是否可以修改工具/过程,而不是创建一个文件夹大文件,代表你的大型数据集。例如一个文件夹有60文件每个~ 1 gb可以非常分区进行平行分析。这是一个广泛使用的最佳实践对大型数据集的存储/表示,让您轻松地分析您的数据在你的个人电脑。

登录置评。

接受的答案

Edric埃利斯
Edric埃利斯 2017年7月10日
在R2017a, fileDatastore 目前仅限于一次读取整个文件。这是一个已知的限制目前的实现中,这绝对是我们希望能够解决在未来的MATLAB的释放。就目前而言,不幸的是唯一的解决方案是将数据分割成多个文件,每个文件可以加载而不会耗尽内存。你可以使用一个 fileDatastore 实例与多个数据文件,在第一个例子所示 fileDatastore参考页面
1评论
安东尼·巴龙
安东尼·巴龙 2017年7月11日
Edric,
我欣赏答案,虽然我诚然失望。我希望这个会在即将发布实施。
我也认为分割数据,保存,和加载,但说实话,我不认为这是值得的。的一部分,这是第二份数据集的不便之外,实际上是无用的Matlab(这不是一个大问题我目前~ 60 gb的文件,尽管这是一个试验……在全面生产的一些数据集,它将使用很容易10-20x大小)。然而,一个更大的部分是我的感觉,如果基本的装载数据不能没有这些修改和解决方法的有点,我只能认为这个项目已经把“搁置”,因此并不是准备全面生产使用。我不能真正看到依赖希望再也不会有问题,我想,等到我能够进一步尝试在我的空闲时间来验证我想象2017 b已经将。
无论如何,我非常感谢明确的答案。我会留意在将来的版本中,看看这个功能已经成熟了一点。

登录置评。

类别

找到更多的在大文件和大数据帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!