Код: Выделить всё
sklearnОсновные данные представляют собой нерегулярные многомерные временные ряды (очень длинный двумерный массив). Его можно было бы разделить по столбцам, чтобы уместиться в памяти, но моему конвейеру sklearn требуется 2D DataFrame.
Говорят, что Dask способен обрабатывать данные на диске, но он даже не загружает данные для меня, что приводит к ошибке хеширования.
Минимальный воспроизводимый пример:
Код: Выделить всё
# Python v3.13.9, dask 2025.10.0, h5py 3.15.1
import h5py
import numpy as np
import pandas as pd
import dask.array as da
import dask.dataframe as dd
# stores random data as 'test' dataset via h5py
with h5py.File("test.h5", 'w') as f:
arr = np.random.rand(10, 10)
f.create_dataset(name='test', data=arr, dtype=np.float32)
# tries loading the data via h5py
with h5py.File("test.h5", 'r') as f:
loaded_arr = f['test']
# creates an array (WORKS)
dask_array = da.from_array(loaded_arr)
dask_array[3, 7].compute()
print("OK", type(dask_array))
# creates pandas dataframe (WORKS)
pandas_dataframe = pd.DataFrame(loaded_arr)
pandas_dataframe.iloc[3, 7]
print("OK", type(pandas_dataframe))
# creates dask dataframe (FAILS)
dask_dataframe = dd.from_array(loaded_arr)
dask_dataframe.iloc[3, 7].compute()
print("OK", type(dask_dataframe))
Код: Выделить всё
dd.from_arrayКод: Выделить всё
TokenizationError: Object \ cannot be deterministically hashed. This likely indicates that the object cannot be serialized deterministically.
Использует синтаксис getitem для извлечения фрагментов из массива. Массив не обязательно должен быть массивом NumPy, но должен поддерживать синтаксис срезов.
Код: Выделить всё
h5py.DatasetСуществует также способ чтения HDF5 напрямую (Dask использует PyTables под капотом), но он также не работает из-за тонких различий между реализациями форматов PyTables и h5py, что и ожидалось.
Код: Выделить всё
dd.read_hdf("test.h5",key="test")
Код: Выделить всё
TypeError: An error occurred while calling the read_hdf method registered to the pandas backend.
Original Message: cannot create a storer if the object is not existing nor a value are passed
Код: Выделить всё
dd.from_array(loaded_arr\[...\])Я ни за что не буду использовать серверную часть PyTables для создания файлов вместо h5py, даже если это поможет.
Я также не очень хочу использовать Dask, но его единственная альтернатива, Vaex, все еще не поддерживает Python 3,13 (в 2025 г.). Так что я застрял.
Я также не хочу самостоятельно реализовывать обработку фрагментированных данных. Самый простой вариант — разделить данные по столбцам, но это нарушает следующие этапы обработки.
Подробнее здесь: https://stackoverflow.com/questions/798 ... -dataframe
Мобильная версия