2015-05-13 2 views
0

Я пытаюсь разобрать огромный .dat-файл (4gb). Я пробовал с R, но это занимает слишком много времени. Есть ли способ проанализировать файл .dat по сегментам, например каждые 30000 строк? Любые другие решения также будут приветствоваться. Это то, что он выглядит следующим образом:
enter image description hereЧтение и разбор большого .dat-файла

Это первые две строки с заголовком: ST|ZIPCODE|GEO_ID|GEO_TTL|FOOTID_GEO|NAICS2012|NAICS2012_TTL|FOOTID_NAICS|YEAR|EMPSZES|EMPSZES_TTL|ESTAB|ESTAB_F <br/> 01|35004|8610000US35004|35004(MOODY,AL)||00|Total for all sectors||2012|001|All establishments|167| <br/> 01|35004|8610000US35004|35004(MOODY,AL)||00|Total for all sectors||2012|212|Establishments with 1 to 4 employees|91|

+0

Что находится в файле '.dat'? Можете ли вы дать пару строк, чтобы мы знали структуру. Вы можете значительно увеличить скорость чтения R, если вы укажете структуру. –

+0

Разделение всех элементов в сегментах не решит ничего, да и останется 4 ГБ. Независимо от того, как вы крутите или изгибаете его. Извините, что не отвечал или не помогал, но просто хотел указать на это – Syntasu

+0

@EliKorvigo Я добавил фрагмент файла. – peech

ответ

0

Это вариант для чтения данных быстрее в R с помощью функции fread в data.table пакете.

EDIT

Я удалил все <br/> теги новой строки. Это отредактированный набор данных

ST|ZIPCODE|GEO_ID|GEO_TTL|FOOTID_GEO|NAICS2012|NAICS2012_TTL|FOOTID_NAICS|YEAR|EMPSZES|EMPSZES_TTL|ESTAB|ESTAB_F 
01|35004|8610000US35004|35004(MOODY,AL)||00|Total for all sectors||2012|001|All establishments|167| 
01|35004|8610000US35004|35004(MOODY,AL)||00|Total for all sectors||2012|212|Establishments with 1 to 4 employees|91| 

Затем я сопоставлял переменные с классами. Вы должны использовать nrows ~ 100.

colclasses = sapply(read.table(edited_data, nrows=1, sep="|", header=T),class) 

Затем я прочитал отредактированные данные.

your_data <- fread(edited_data, sep="|", sep2=NULL, nrows=-1L, header=T, na.strings="NA", 
     stringsAsFactors=FALSE, verbose=FALSE, autostart=30L, skip=-1L, select=NULL, 
     colClasses=colclasses) 

Все работает как шарм. В случае, если у вас есть проблемы с удалением тегов, используйте этот простой скрипт на Python (это займет некоторое время, наверняка):

original_file = file_path_to_original_file # e.g. "/Users/User/file.dat" 
edited_file = file_path_to_new_file # e.g. "/Users/User/file_edited.dat" 

with open(original_file) as inp: 
    with open(edited_file, "w") as op: 
     for line in inp: 
      op.write(line.replace("<br/>", "") 

P.S.

Вы можете использовать read.table с аналогичной оптимизацией, но это не даст вам почти такую ​​же скорость.

+0

'Ошибка в fread (" installedments_by_zip.dat ", sep =" | ", sep2 = NULL, nrows = -1L,: Имя столбца 'V1' в colClasses [[1]] not found' Я получаю следующее ошибка. Я не совсем знаю, что происходит. Должен ли я указывать имена столбцов заранее? – peech

+0

Дайте мне первые 2 строки вашего набора данных (а не скриншот). –

+0

Я отредактировал исходное сообщение. Спасибо. – peech

Смежные вопросы