Skip to main content

File-like object from url of remote file, optimized for use with h5py.

Project description

remfile

latest-release tests codecov

Provides a file-like object for reading a remote file over HTTP, optimized for use with h5py.

Example usage:

# See examples/example1.py

import h5py
import remfile

url = 'https://dandiarchive.s3.amazonaws.com/blobs/d86/055/d8605573-4639-4b99-a6d9-e0ac13f9a7df'

file = remfile.File(url)

with h5py.File(file, 'r') as f:
    print(f['/'].keys())

See examples/example1.py for a more complete example.

Installation

pip install remfile

Why?

The conventional way of reading a remote hdf5 file is to use the fsspec library as in examples/example1_compare_fsspec.py. However, this approach is empirically much slower than using remfile. I am not familiar with the inner workings of fsspec, but it does not seem to be optimized for reading hdf5 files. Efficient access of remote hdf5 files requires reading small chunks of data to obtain meta information, and then large chunks of data, and parallelization, to obtain the larger data arrays.

See a timing comparison betweeen remfile and fsspec in the examples directory.

How?

A file-like object is created that reads the remote file in chunks using the requests library. A relatively small default chunk size is used, but when the system detects that a large data array is being accessed, it switches to a larger chunk size. For very large data arrays, the system will use multiple threads to read the data in parallel.

Disk caching

The following example shows how to use disk caching. Notice that this is not an LRU cache, so there is no cleanup operation. The cache will grow until the disk is full. Therefore, you are responsible for deleting the directory when you are done with it.

import remfile

url = 'https://dandiarchive.s3.amazonaws.com/blobs/d86/055/d8605573-4639-4b99-a6d9-e0ac13f9a7df'

cache_dirname = '/tmp/remfile_test_cache'
disk_cache = remfile.DiskCache(cache_dirname)

file = remfile.File(url, disk_cache=disk_cache)

with h5py.File(file, 'r') as f:
    print(f['/'].keys())

Caveats

This library is not intended to be a general purpose library for reading remote files. It is optimized for reading hdf5 files.

License

Apache 2.0

Author

Jeremy Magland, Center for Computational Mathematics, Flatiron Institute

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

remfile-0.1.6.tar.gz (10.5 kB view details)

Uploaded Source

Built Distribution

remfile-0.1.6-py3-none-any.whl (10.4 kB view details)

Uploaded Python 3

File details

Details for the file remfile-0.1.6.tar.gz.

File metadata

  • Download URL: remfile-0.1.6.tar.gz
  • Upload date:
  • Size: 10.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for remfile-0.1.6.tar.gz
Algorithm Hash digest
SHA256 81816b33f31a568c5f0f8845d36c2c5f77062e7d19f059927871a2eb8081391b
MD5 cb17a47fce9941f4a015e583465b2461
BLAKE2b-256 69b696ca5f4ff72f1fc1538f9201eda3501551d5f2893c89717b10e8b2c257be

See more details on using hashes here.

File details

Details for the file remfile-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: remfile-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 10.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for remfile-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 bdf59918a63822f2c82a94e5546ea9a348863a042071bc5a524a255383e1b487
MD5 1717c82c50dca423c86faf0df4668b97
BLAKE2b-256 90fb38ca1c3b4f5e49ec7d60bc97bd0b3fea916b28b21b5f1833769684487989

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page