[
https://issues.apache.org/jira/browse/BEAM-6027?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17547477#comment-17547477
]
Kenneth Knowles commented on BEAM-6027:
---------------------------------------
This issue has been migrated to https://github.com/apache/beam/issues/19238
> Slow DownloaderStream when reading from GCS
> -------------------------------------------
>
> Key: BEAM-6027
> URL: https://issues.apache.org/jira/browse/BEAM-6027
> Project: Beam
> Issue Type: Bug
> Components: sdk-py-core
> Reporter: Andreas Jansson
> Priority: P3
> Time Spent: 2h 50m
> Remaining Estimate: 0h
>
> DownloaderStream inherits io.RawIOBase, which by defaults reads
> io.DEFAULT_BUFFER_SIZE chunks in .readall(). This is causing extremely slow
> performance when invoking read() on handles returned by GcsIO().open().
> The following code can take ~60 seconds to download a single 2MB file:
> {code:python}
> gcs = GcsIO()
> t = time.time()
> path = 'gs://my-bucket/my-2MB-file'
> with gcs.open(path) as f:
> f.read()
> duration = time.time() - t
> {code}
> This monkey patch makes the same download code take <1 second:
> {code:python}
> from apache_beam.io.gcp import gcsio
> from apache_beam.io.filesystemio import DownloaderStream
> def downloader_stream_readall(self):
> """Read until EOF, using multiple read() call."""
> res = bytearray()
> while True:
> data = self.read(gcsio.DEFAULT_READ_BUFFER_SIZE)
> if not data:
> break
> res += data
> if res:
> return bytes(res)
> else:
> return data
> DownloaderStream.readall = downloader_stream_readall
> {code}
--
This message was sent by Atlassian Jira
(v8.20.7#820007)