У меня есть несколько больших файлов (> 4 ГБ каждый). Некоторые из них имеют формат с фиксированной шириной, а некоторые - с разделителями. Файлы имеют как цифры c, так и текстовые данные. В настоящее время я использую следующий подход:
df1 = pd.read_fwf(fwFileName, widths = [2, 3, 5, 2, 16],
names = columnNames, dtype = columnTypes,
skiprows = 1, engine = 'c',
keep_default_na = False)
df2 = pd.read_csv(pdFileName, sep = '|', names = columnNames,
dtype = columnTypes, useCols = colNumbers,
skiprows = 1, engine = 'c',
keep_default_na = False)
Однако, это, кажется, медленнее, чем, например, read_fwf R (из readr) и Fread (из data.table). Могу ли я использовать другие методы, которые помогут ускорить чтение этих файлов?
Я работаю на большом сервере с несколькими ядрами, поэтому проблема с памятью не возникает. Я могу безопасно загрузить все файлы в память. Возможно, это одно и то же в этом случае, но моя цель - оптимизировать по времени, а не по ресурсам.
Обновление
Основываясь на комментариях, пока Несколько дополнительных подробностей о данных и моей конечной цели.
- Эти файлы сжаты (фиксированная ширина - zip, а разделитель трубы - gzip). Поэтому я не уверен, что такие вещи, как Dask, добавят ценность для загрузки. Будут ли они?
- После загрузки этих файлов я планирую применить вычислительно дорогую функцию к группам данных. Поэтому мне нужны все данные. Хотя данные отсортированы по группам, т.е. первые x строк - это группа 1, следующие y строк - это группа 2 и т. Д. Поэтому формирование групп на лету может быть более продуктивным? Есть ли эффективный способ сделать это, учитывая, что я не знаю, сколько строк ожидать для каждой группы?