当前位置: 首页 > 知识库问答 >
问题:

DASKread_csv大文件的Amazon s3超时

尉迟明贤
2023-03-14

对于大文件,s3上的dask read_csv超时

s3fs.S3FileSystem.read_timeout = 5184000  # one day
s3fs.S3FileSystem.connect_timeout = 5184000  # one day

client = Client('a_remote_scheduler_ip_here:8786')

df = dd.read_csv('s3://dask-data/nyc-taxi/2015/*.csv')
len(df)

len(df)有超时异常,如果文件很小,那么它就可以正常工作。

我认为我们需要一种设置s3fs的方法。S3FileSystem.read_timeout在远程工作人员,而不是本地代码,但我不知道如何做到这一点。

以下是堆栈跟踪的一部分:

文件"/opp/conda/lib/python3.6/site-包/dask/bytes/utils.py",第238行,在read_block文件"/opp/conda/lib/python3.6/site-包/s3fs/core.py",第1333行,在读取文件"/opp/conda/lib/python3.6/site-包/s3fs/core.py,第1303行,_fetchFile"/opt-conda/lib/python3.6/site-包/s3fs/core.py",第1520行,_fetch_rangeFile"/opt-conda/lib/python3.6/site-包/botocore/response.py",第81行,读取botocore.exceptions.ReadTimeoutError:读取endpointURL上的超时:无

共有1个答案

通奕
2023-03-14

使用class属性设置超时似乎是一件合理的事情,但是您正在使用客户端与其他进程/机器中的工作人员交谈。因此,您需要在每个辅助角色的类副本上设置属性,以便您的方法生效。

也许更好的办法是将read_csv(默认为64MB)使用的块大小设置为较小的数字。我假设您在一个较慢的网络上,这就是为什么您会超时。如果您需要低于5MB的数字,即s3fs中默认的预读大小,那么您还应该在传递给read_csvstorage_options之间传递default_block_size

最后,请注意,s3fs和dask都允许重试、连接错误或一般任务错误。这可能足以帮助你的情况下,你只得到这个偶尔laggy准备。

 类似资料:
  • 我们目前有一个小的web应用程序,其中一部分是文件上传。目前,我们在客户端上使用Plupload,并启用了分块功能,以允许上传大型文件。这些文件被保存在应用服务器上,当它们出现时,这些块被追加。 现在,我们正在使用AmazonS3来存储文件,并有可能使用多个应用服务器。我发现很难处理这些大块。我试着以他们为榜样,但我遇到了问题。我尝试的主要内容是这样的: 我的问题是我需要知道上传的块。当我从上传的

  • 目前我正在使用pdfbox下载我服务器上的所有pdf文件,然后使用pdfbox将它们合并在一起。它的工作非常好,但它非常慢--因为我必须下载所有的。 有没有一种方法可以直接在S3上执行所有这些?我正在试图找到一种方法来实现它,即使不是在Java也是在python中,也无法做到这一点。 我读到了以下内容: 在S3 Amazon上合并文件 null null 编辑 最后我使用 并用 实现它。我设置了最

  • 目前,我正在尝试将一个文件上载到AmazonS3存储桶,我对此进行了一些研究,发现如果文件足够大,类TransferManager会将文件拆分为小块,然后使用多个线程并行上载。现在在应用程序中,我们正在创建一个AmazonS3客户端实例(在应用程序开始时创建的一个bean),并使用该AmazonS3客户端为用户上传文件所需的每个文件创建TransferManager类实例,文件上传完成后(由Tra

  • 我需要生成一个非常大的文本文件。每一行都有一个简单的格式: 假设我要生成一个有1亿行的文件。我尝试了两种方法,令人惊讶的是,它们给出了非常不同的时间表现。 > 用于100m以上的循环。在每个循环中,我生成的短字符串,然后将其写入文件。这种方法需要很多时间。 请注意: 方法2有2个循环,而不是1个循环。 对于方法1和方法2,我都在循环中写入文件。因此这两个步骤必须相同。 因此方法1必须花费更少的时间

  • 我试图用位于S3上的输入文件创建一个Amazon Transbe作业,该文件的大小是4.3GB,当我试图创建作业时,会显示这个错误。 我可以用我的视频做什么?我应该转换视频,提取音频,还是有什么方法可以用一些AWS服务来做

  • 我正在写一个小程序,可以处理大的(最多无限个)文本文件。处理过程将相当简单(将部分内容修剪并处理成单独的字符串,然后打印出来)。然而,由于数据的长度可能是无限的,我可能会遇到超过堆的问题。我想到的第一个解决方案是使用流来处理数据。然而,Files类中的lines()方法只能将文本分成行。我的线条也可以无限长! 我遇到的另一个解决方案是使用scanner useDelimiter方法: 这种方法会阻