amazon-web-services - dask S3读取缓存磁盘/RAM上的数据吗?

标签 amazon-web-services amazon-s3 dask

我一直在阅读有关 dask 的内容以及它如何从 S3 读取数据并以不需要数据完全驻留在 RAM 中的方式进行处理。

我想了解如果我想要读取一个非常大的 S3 文件,dask 会做什么。会吗:

  • 将该 S3 文件加载到 RAM 中吗?
  • 加载该 S3 文件并将其缓存在 /tmp 或其他位置?
  • 分批多次调用 S3 文件

我假设在这里我正在对数据帧进行许多不同的复杂计算,并且可能需要对数据进行多次传递 - 即,假设连接、分组等。

另外,一个附带问题是,如果我从 S3 > join > groupby > filter > join 中进行选择 - 我要加入的临时数据帧会在 S3 上吗?或者在磁盘上?还是内存?

我知道 Spark 在这种情况下使用 RAM 并溢出到 HDFS。

目前我主要考虑的是单机dask。

最佳答案

对于许多文件类型,例如 CSV、parquet,S3 上的原始大文件可以安全地分割成 block 进行处理。在这种情况下,每个 Dask 任务将通过单独调用 S3 一次处理一大块数据。每个 block 在处理时都将位于工作进程的内存中。

当进行涉及连接来自多个文件 block 的数据的计算时, block 的预处理仍然按照上面的方式进行,但现在 Dask 保留临时结构来累积部分结果。多少内存取决于数据的分块大小,您可能会也可能不会控制数据的分块大小,具体取决于数据格式以及您想要对其应用的计算。

是的,当内存使用量很大时,Dask 能够溢出到光盘上。这在分布式调度程序中可以得到更好的处理(现在即使在单台机器上也是推荐的默认调度程序)。使用 --memory-limit--local-directory CLI 参数,或者使用 Client()/ 时的等效参数LocalCluster(),控制每个工作线程可以使用多少内存以及放置临时文件的位置。

关于amazon-web-services - dask S3读取缓存磁盘/RAM上的数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49727213/

相关文章:

python - 使用 Python 在 Parquet 中嵌套数据

javascript - 如何使用 Node/Angular/JavaScript 将多个图像上传到亚马逊 AWS S3 存储桶

amazon-web-services - S3 网页重定向 : can't set x-amz-website-redirect-location property

python - 使用另一个数据帧中的值创建新的 dask 数据帧列会导致 "chunk sizes are unknown"错误

python - 如何使用Dask在GPU上运行python代码?

java - BufferedReader 如何从 S3 读取文件?

amazon-web-services - 一台大EC2、多台小EC2、一台ECS,哪个划算?

amazon-web-services - 亚马逊云前端 : How to get monthly cost breakdown per distribution?

javascript - 为上传到 AWS S3 的图像设置 Expires 和 Cache-Control header

python - 如何将爬取的数据从 Scrapy 以 csv 或 json 的形式上传到 Amazon S3?