Как работать с большим csv-файлом 50GB на языке r?

Я относительно новичок в" большом процессе данных " в r здесь, надеюсь найти некоторые советы о том, как обращаться с файлом csv 50 GB. Текущая проблема заключается в следующем:

таблица выглядит так:

ID,Address,City,States,... (50 more fields of characteristics of a house)
1,1,1st street,Chicago,IL,...
# the first 1 is caused by write.csv, they created an index raw in the file

Я хотел бы найти все строки, которые принадлежат Сан-Франциско, Калифорния. Это должна быть простая проблема, но csv слишком велик.

Я знаю, что у меня есть два способа сделать это в R и другой способ использовать базу данных для ее обработки:

(1) с помощью Пакеты ffdf R:

С момента последнего сохранения файла он использовал write.csv и он содержит все различные типы.

all <- read.csv.ffdf(
  file="<path of large file>", 
  sep = ",",
  header=TRUE, 
  VERBOSE=TRUE, 
  first.rows=10000, 
  next.rows=50000,
  )

консоль дает мне это:

Error in ff(initdata = initdata, length = length, levels = levels, ordered = ordered,  
: vmode 'character' not implemented

поиск в Интернете, я нашел несколько ответов, которые не соответствовали моему случаю, и я не могу понять, как передать "характер" в тип "фактор", как они упоминали.

затем я попытался использовать чтение.таблица.ffdf, это еще большая катастрофа. Я не могу найти надежного проводника. для этого.

(2) Использование строки чтения R:

Я знаю, что это еще один хороший способ, но не можете найти эффективный способ сделать это.

(3) использование SQL:

Я не уверен, как перевести файл в SQL версию, и как с этим справиться, если есть хорошее руководство, я хотел бы попробовать. Но в целом, я хотел бы придерживаться с Р.

Спасибо за ответ и помощь!

2 ответов


вы можете использовать R с SQLite за шторами с пакетом sqldf. Вы бы использовали


Это слишком долго для комментария.

R -- в своей базовой конфигурации -- загружает данные в память. Память дешева. 50 Гбайт по-прежнему не является типичной конфигурацией (и вам понадобится больше, чтобы загрузить данные и сохранить их). Если вы действительно хороши в R, вы можете выяснить другой механизм. Если у вас есть доступ к кластеру, вы можете использовать некоторую параллельную версию R или Spark.

вы также можете загрузить данные в базу данных. Для задачи под рукой база данных очень хорошо подходит для этой проблемы. R легко подключается практически к любой базе данных. И вы можете найти базу данных очень полезной для того, что вы хотите сделать.

или вы можете просто обработать текстовый файл in situ. Инструменты командной строки, такие как awk, grep и perl, очень подходят для этой задачи. Я бы рекомендовал этот подход для одноразовых усилий. Я бы рекомендовал базу данных, если вы хотите сохранить данные для аналитических целей.