Многомерные массивы

Параллельное программирование с Dask на Python

James Fulton

Climate Informatics Researcher

Типы многомерных данных

  • Прогнозы и наблюдения погоды
  • 3D-сканирование в медицине
  • Спутниковые снимки
  • Данные научных приборов
Параллельное программирование с Dask на Python

HDF5

Логотип HDF

  • Иерархический формат данных
  • Хранится в иерархической структуре — наподобие (под)каталогов
Параллельное программирование с Dask на Python

Как выглядит файл HDF5?

Одна папка

Параллельное программирование с Dask на Python

Как выглядит файл HDF5?

Одна папка, содержащая четыре набора данных и метаданные.

Параллельное программирование с Dask на Python

Работа с файлами HDF5 через h5py

import h5py

# Open the HDF5 file
file = h5py.File('data.hdf5')


# Print the available datasets inside the file print(file.keys())
<KeysViewHDF5 ['A', 'B', 'C', 'D']>
Параллельное программирование с Dask на Python

Работа с файлами HDF5 через h5py

import h5py

# Open the HDF5 file
file = h5py.File('data.hdf5')


# Select dataset A dataset_a = file['/A']
print(dataset_a)
<HDF5 dataset "A": shape (10000, 100, 100), type "<f4">
Параллельное программирование с Dask на Python

Загрузка из HDF5

import dask.array as da

# Load dataset into a Dask array a = da.from_array(dataset_a, chunks=(100, 20, 20))
print(a)
dask.array<array, shape=(10000, 100, 100), dtype=float32, chunksize=(100, 20, 20),
    chunktype=numpy.ndarray>
Параллельное программирование с Dask на Python

Zarr

  • Иерархический формат, как HDF5
  • Рассчитан на чанки
  • Подходит для потоковой обработки в облаке: AWS, Google Cloud и др.
  • Навигируемая структура файлов
Параллельное программирование с Dask на Python

Загрузка из Zarr

import dask.array as da

a = da.from_zarr("dataset.zarr", component="A")


print(a)
dask.array<from-zarr, shape=(10000, 100, 100), dtype=float32,
    chunksize=(100, 20, 20), chunktype=numpy.ndarray>
Параллельное программирование с Dask на Python

Давайте потренируемся!

Параллельное программирование с Dask на Python

Preparing Video For Download...