Руководство по эффективному использованию HDFStore - PullRequest
0 голосов
/ 31 декабря 2018

В моем приложении для обработки данных у меня около 80% времени обработки просто потрачено на функцию pandas.HDFStore.put.Несмотря на то, что существуют различные вопросы SO по поводу подобных проблем, я не нашел определенного руководства о том, как наиболее эффективно использовать 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', 'completevel' при создании магазина
  • , чтобы сделать индексирование более эффективным (возможно, вызов create_table_index только приконец?)
  • параметры store.put / store.append
  • Я читал кое-что об уровнях индекса, например ('medium', 6), это могло бы повлиять?
  • Может лиЯ уменьшаю индекс с datetime (который хранится как Int64) до чего-то более эффективного, например, за миллисекунды?

(чтение не такая большая проблема, как store.select с where=...весьма эффективно.)

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

...