Руководство по эффективному использованию HDFStore
В моем приложении для обработки данных у меня около 80% времени обработки просто потрачено на функцию pandas.HDFStore.put
, Несмотря на то, что существуют разные вопросы о подобных проблемах, я не нашел определенного руководства по использованию HDFStore
наиболее эффективным способом.
Какие варианты у меня есть, чтобы сократить время записи?
Мои данные состоят только из столбцов float64 и некоторых запасных int-столбцов, они могут содержать дублированные индексы и / или имена столбцов и априори не сортируются. Это будут данные, собранные за десятилетия (с разрешением в секунду), поэтому решение должно быть масштабируемым.
Мои основные случаи использования следующие:
# 1. Store creation
store = pd.HDFStore(pro['hdf_path'], complevel=7,
complib='blosc', fletcher32=True)
# 2. Iterative addition of new data
store.put('/table/T1', data, format='table', data_columns=True,
append=True, index=False)
# 3. Basic queries of certain columns (I only need 'index' in 'where')
store.select('/table/T1', columns=['A', 'B', ...],
where='index>="{}" & index<{sign}"{}"'.format(_t1, _t2))
# 4. Retrieving a tree with all tables and all column
# names in that table (without loading it)
for path, groups, leaves in store.walk():
...
for lv in sorted(leaves):
_item_path = '/'.join([path, lv])
columns = store.get_node('{}/table'.format(_item_path)).description._v_names
Конкретно мне было бы интересно узнать, как изменить следующие параметры для оптимизации времени записи:
- 'Compb', 'Complete' в создании магазина
- сделать индексирование более эффективным (возможно, вызов
create_table_index
только в конце?) - параметры
store.put
/store.append
- Я читал кое-что об уровнях индекса, как
('medium', 6)
будет ли это иметь влияние? - Могу ли я уменьшить индекс с datetime (который хранится как Int64) до чего-то более эффективного, например, за миллисекунды?
(Чтение не столько проблема, сколько store.select
с where=...
довольно эффективно.)
Спасибо за любую помощь, это очень ценится!