Я анализирую данные с разделителями табуляции для создания табличных данных, которые я хотел бы хранить в HDF5.
Моя проблема заключается в том, что я должен объединить данные в один формат, а затем сбрасывать в HDF5. Это данные размером ~ 1 ТБ, поэтому я, естественно, не могу поместиться в ОЗУ. Dask может быть лучшим способом выполнить эту задачу.
Если я использую синтаксический анализ своих данных для вставки в один фреймворк pandas, я бы сделал следующее:
import pandas as pd
import csv
csv_columns = ["COL1", "COL2", "COL3", "COL4",..., "COL55"]
readcsvfile = csv.reader(csvfile)
total_df = pd.DataFrame() # create empty pandas DataFrame
for i, line in readcsvfile:
# parse create dictionary of key:value pairs by table field:value, "dictionary_line"
# save dictionary as pandas dataframe
df = pd.DataFrame(dictionary_line, index=[i]) # one line tabular data
total_df = pd.concat([total_df, df]) # creates one big dataframe
Используя dask для выполнения той же задачи, кажется, что пользователи должны попробовать что-то вроде этого:
import pandas as pd
import csv
import dask.dataframe as dd
import dask.array as da
csv_columns = ["COL1", "COL2", "COL3", "COL4",..., "COL55"] # define columns
readcsvfile = csv.reader(csvfile) # read in file, if csv
# somehow define empty dask dataframe total_df = dd.Dataframe()?
for i, line in readcsvfile:
# parse create dictionary of key:value pairs by table field:value, "dictionary_line"
# save dictionary as pandas dataframe
df = pd.DataFrame(dictionary_line, index=[i]) # one line tabular data
total_df = da.concatenate([total_df, df]) # creates one big dataframe
После создания фрейма данных TB, я сохраню в hdf5.
Моя проблема в том, что total_df
не вписывается в ОЗУ и должен быть сохранен на диске. Может ли dask
dataframe выполнить эту задачу?
Должен ли я попробовать что-то еще? Было бы проще создать HDF5 из множества массивов dask, т.е. Каждый столбец/поле представляет собой массив dask? Может быть, разделяем числовые кадры между несколькими узлами и уменьшаем их в конце?
EDIT: для ясности я фактически не читаю непосредственно из файла csv. Я агрегирую, разбор и форматирование табличных данных. Итак, readcsvfile = csv.reader(csvfile)
используется выше для ясности/краткости, но это намного сложнее, чем чтение в CSV файле.