Руководство по эффективному использованию 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=... довольно эффективно.)

Спасибо за любую помощь, это очень ценится!

0 ответов

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