Я создал большой (120 ГБ, 1 миллиард строк) файл HDF5 с помощью панд. После первоначального создания файла HDF, я добавил в файл следующим образом:pandas.HDFStore: Как изменить «data_columns» для существующего хранилища? Я хотел бы добавить индекс в столбец не в столбцах данных
with pd.get_store(path_output) as hdf_output:
for i in range(BIG_LOOP):
df = ...
hdf_output.append('all', df, data_columns=[])
I целеустремленно набор data_columns = [], чтобы избежать индексации во время создания. Теперь, когда у меня есть файл HDF, я бы хотел добавить индексы в несколько столбцов (скажем, columns_to_index = ['A', 'B', 'C'])
Как-то, в соответствии с ptdump У меня есть data_columns:=['A']
на момент, но я не помню, как это произошло. (Возможно, исходный df был написан с другим параметром (я несколько раз добавлял в hdfstore несколько дней, и я, возможно, что-то изменил). В любом случае, независимо от того, как это было создано, я хотел бы индексировать дополнительные столбцы.
Простой вызов mystore.create_table_index('all', columns=['A', 'B', 'C'], optlevel=9, kind='full')
не работает, по-видимому. В первый раз, когда я запустил его, он опрокинулся на час и добавил 2 ГБ к файловому размеру (проверка метаданных показывает, что chunksize был увеличен), но я не есть все 3 индекса (только индекс для «A») Как я могу генерировать индекс для всех 3-х колонок
Я также заметил эту линию в ptdump -.? кажется, беспокоит то, что у меня есть «non_index_axes» для предметов, которые я хотел бы указать: non_index_axes := [(1, ['A', 'B', 'C'])]
Если вы не можете создать индекс в пандах, я бы посоветовал, как это сделать прямо в pytables. (Например, мне нужно сначала удалить все существующие индексы и как изменить «non_index_axes» и «data_coumns»?)
Edit: Предвосхищая вопросы о моем прецеденте, вот большая картина того, что я 'm пытается выполнить:
Читайте в 120 ГБ данных из файлов CSV. Каждый файл представляет собой один день финансовых данных и состоит из 100 000 строк, из которых около десятка столбцов в строке. Я просто сохраняю каждую строку, последовательно, в файле HDF5. Я бы хотел, чтобы эта начальная фаза работала быстро, поэтому я отключил индексирование. В настоящее время я читаю и разбираю каждый файл CSV за 6 секунд, а хранение в файл HDF5, как указано выше, занимает всего 1,5 секунды.
Индекс небольшой (не всех) столбцов для поддержки множества запросов, таких как получение всех элементов с заданной строкой в столбце 1 и датой из столбца 2 в определенном диапазоне.
С течением времени каждый день я буду разбирать новый файл CSV и добавлять его в файл HDF5. Я ожидаю, что индексы будут продолжать обновляться.
(В зависимости от моих шаблонов доступа порядок, в котором хранятся строки (в настоящее время, по дате), может оставаться лучшим вариантом для извлечения. Мне также может понадобиться сортировать по другому столбцу в большинстве запросов, в этом случае я думаю, что я должен был бы повторно сортировать таблицу после каждого файла CSV обрабатывается и добавляется.)
в настоящее время я застрял на шаге 2, генерируя индексы столбцов.
Спасибо - да, я нашел этот индекс = False синтаксис после того как я уже сформирован файл, так что это здорово знать. Тем не менее, кажется, что в идеале я мог бы исправить существующий файл - «data_columns» не установлены в файле HDF ... не так ли? – eraoul