HDF5 с Python, Pandas: повреждение данных и ошибки чтения

Поэтому я пытаюсь хранить Pandas DataFrames в HDF5 и получаю странные ошибки, довольно непоследовательно. По крайней мере, половину времени некоторая часть цикла чтения-процесса-перемещения-записи завершается неудачно, часто без более четкого объяснения, чем "Ошибка чтения HDF5". Хуже того, иногда таблица заканчивается бессмысленными / испорченными данными, которые не останавливают вещи до нисходящего потока - либо значения, которые отклоняются на порядки (и даже не соотносятся с правильными), либо даты, которые не имеют смысла (последние данные ошибочно отмечены как датированные 1750-ми годами... и т. д.).

Я думал, что пройду текущий процесс, и тогда вещи, которые, как я подозреваю, могут вызвать проблемы, могут помочь. Вот как это выглядит:

  1. Прочитайте некоторые из таблиц (назовите их "QUERY1" и "QUERY2"), чтобы увидеть, обновлены ли они, а если нет,
  2. Возьмите таблицу, которая была в хранилище HDF5, как "QUERY1" и вместо этого сохраните ее как QUERY1_YYYY_MM_DD"в хранилище HDF5.
  3. Запустите связанный запрос к внешней базе данных для этой таблицы. Каждый из них содержит от 100 до 1500 столбцов ежедневных данных, относящихся к 1980 году.
  4. Сохраните результат запроса 1 как новый "QUERY1" в хранилище HDF5.
  5. Вычислить несколько преобразований одного или нескольких из QUERY1, QUERY2,...QUERYn, которые будут иметь иерархические (Pandas MultiIndex) столбцы. Перезаписать элемент "Derived_Frame1"... и т. Д. С его обновлением / заменой в магазине HDF5
  6. Несколько человек, имеющих доступ к соответствующему файлу.h5 на сетевом диске Windows, запускают эту процедуру - возможно, иногда, но не обычно, одновременно.

Некоторые вещи, которые я подозреваю, могут быть частью проблемы:

  • используя формат по умолчанию (df.to_hdf(store, key)) вместо того, чтобы настаивать на формате "Таблица" с df.to_hdf(store, key, format='table')). Я делаю это, потому что формат по умолчанию в 2–5 раз быстрее как для чтения, так и для записи в соответствии с% timeit

  • Использование сетевого диска, чтобы несколько пользователей могли запустить эту процедуру и получить доступ по крайней мере к производным кадрам. Я мало что могу сделать с этим требованием, особенно для доступа на чтение к производным фреймам данных в любое время.

  • Из документации кажется, что многократное удаление и перезапись элемента в хранилище HDF5 может привести к странным вещам (по крайней мере, постепенно увеличивая размер файла, не зная, что еще). Может быть, я должен хранить архивы запросов в другом файле? Может быть, я должен уничтожить и заменить весь основной файл после обновления?

  • Хранение фреймов данных со столбцами MultiIndex в HDF5, в первую очередь - это то, что заставляет меня получать "предупреждение" в формате по умолчанию, хотя кажется, что предупреждение исчезает, если я использую format='table',

  • Редактировать: также возможно / вероятно, что разные пользователи, выполняющие описанную выше процедуру, используют разные версии Pandas и разные версии PyTables.

Есть идеи?

0 ответов

Другие вопросы по тегам