在云端将10G文件读入内存

时间:2017-12-13 19:17:34

标签: python azure memory

我正在开发Azure。我有一个10G文件,我想读入内存。所有这些都是制表符分隔或.dat文件与一些分隔符。我可以灵活地创建一个计算环境,以便读取和处理这些文件。我如何找出最佳设置,以便我可以在<5分钟内读取文件到内存中(我使用的是Python 3.x.我将使用Pandas和Scikit)

1 个答案:

答案 0 :(得分:0)

我的建议是你可以将你的10G文件放在Azure Blob Storage

Azure Blob storage limits document开始,单个blob的吞吐量高达每秒60 MiB或每秒高达500个请求。

enter image description here

然后,您可以从Azure Blob Storage下载该文件并将其读入内存。

10240M / 60M/s = 170.67s/60= 2.84 min

当然,上述限制仅适用于理想情况。实际情况也受网络环境等因素的影响。

因此,您可以通过两种方式提高性能,以便在不到5分钟的时间内满足您的要求。

1.将blob分成几个部分并按字节顺序下载。

您可以在Get Blob Request Headers中使用Rangex-ms-range仅返回指定范围内blob的字节数。

例如,10G blob文件被拆分为100个请求,每单位时间发送100个请求。然后将其下载到本地文件中以供后续处理。请确保使用正确的位置写入字节。但这需要系统有10G的内存空间供其使用。

enter image description here

2.下载满足配额的每个容量时,同时读入内存。

例如,blob被分为100个请求,每单位时间发送5个请求。按顺序运行20次。每5个请求被写入内存,并且将同时发送以下5个请求。通过这种方式,系统只分配大约500M的内存空间。

鉴于导致请求中断的网络不稳定需要在字节的请求范围内重写,我建议您将文件分成更多部分。

此外,Azure服务器可能是更好的选择,因为本地测试可能无法达到理想状态。

希望它对你有所帮助。