У меня есть набор данных, который составляет 188 миллионов строк с 41 столбцом. Он представляет собой массивный сжатый файл фиксированной ширины, и в настоящее время я читаю его в R, используя пакет vroom
, подобный следующему:
d <- vroom_fwf('data.dat.gz',
fwf_positions([41 column position],
[41 column names])
vroom
делает замечательную работу в том смысле, что данные фактически читает в R-сеанс на машине с 64 ГБ памяти. Когда я запускаю object.size
на d
, это колоссальный размер 61 Гб. Когда я оборачиваюсь, чтобы сделать что-нибудь с этими данными, я не могу. Все, что я возвращаю Error: cannot allocate vector of size {x} Gb
, потому что на самом деле не осталось никакой памяти для чего-либо с этими данными. Я пробовал базу R с [
, dplyr::filter
и пытался преобразовать в data.table через data.table::setDT
каждый с тем же результатом.
Итак, мой вопрос: каковы стратегии людей для такого рода вещей? Моя главная цель - преобразовать сжатый файл фиксированной ширины в формат паркета, но я хотел бы разбить его на небольшие, более управляемые файлы на основе некоторых значений в столбце данных, а затем записать их в паркет (используя arrow::write_parquet
) * 1015. *
На данный момент мои идеи состоят в том, чтобы прочитать подмножество столбцов, оставив столбец, которым я хочу подмножество, написать файлы паркета, затем связать столбцы / объединить их вместе. Это похоже на более подверженное ошибкам решение, поэтому я подумал, что я вернусь сюда и посмотрю, что доступно для дальнейших преобразований.