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

问题描述 投票:-1回答:1

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

python azure memory
1个回答
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分成几个部分并按字节顺序下载。

你可以在Range中使用x-ms-rangeGet Blob Request Headers来仅返回指定范围内blob的字节。

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

enter image description here

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

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

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

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

希望它能帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.