Как бы вы обрабатывали 1 ГБ текстовых данных? - PullRequest
4 голосов
/ 26 сентября 2010

Задача: Обработайте 3 текстовых файла размером около 1 ГБ и превратите их в файлы CSV. Исходные файлы имеют собственную структуру, поэтому регулярные выражения были бы полезны.

Проблема: Нет проблем. Я использую php для этого, и это нормально. На самом деле мне не нужно обрабатывать файлы быстрее. Мне просто любопытно, как бы вы подошли к проблеме в целом. В конце я хотел бы увидеть простые и удобные решения, которые могут работать быстрее, чем php.

@ феликс Я уверен в этом. :) Если я закончу весь проект, я, вероятно, опубликую это как пинг-понг с межязыковым кодом.

@ знак Мой подход в настоящее время работает так, за исключением того, что я кэширую несколько сотен строк, чтобы сохранить низкую запись в файл. Хорошо продуманный обмен памятью, вероятно, выжмет некоторое время. Но я уверен, что другие подходы могут намного превзойти php, как полное использование * nix toolset.

Ответы [ 5 ]

6 голосов
/ 26 сентября 2010

Во-первых, это не имеет большого значения, какой язык вы используете для этого, поскольку он, вероятно, будет связан с вводом / выводом.Более важно то, что вы используете эффективный подход / алгоритм.В частности, вы хотите избежать чтения всего файла в память, если это возможно, и избегать объединения результата в огромную строку перед записью его на диск.

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

1 голос
/ 26 сентября 2010

Как бы я обработал большие объемы текстовых данных, которые вы спрашиваете? perl -p 's/regex/magic/eg' (или некоторый аналог / более сложный вариант).

Это в значительной степени идеально подходит для работы, исключая редкие ситуации с необходимостью абсолютно невероятно быстрой максимальной производительности (когда почти любой язык сценариев выходит из строя).

Это широко доступно, быстро и кратко. Я нахожусь в процессе обучения perl нескольким сотрудникам, и они, кажется, находятся в постоянном страхе в отношении, казалось бы, чудесных подвигов, которые он может выполнять в одной или двух строках кода. И, кроме шутки, вполне жизнеспособно сделать это, оставаясь при этом достаточно читабельным (при условии, что у вас есть разумное понимание языка и нет желания создавать ад для будущих сопровождающих).

1 голос
/ 26 сентября 2010

Я бы достиг сед .

0 голосов
/ 26 сентября 2010

Perl - старый гроссмейстер по обработке текста, по уважительным причинам. Я полагаю, что многие сильные стороны Perl обнаружены в Python сегодня более доступным способом, поэтому, когда дело доходит до синтаксического анализа текста, я обычно использую Python (раньше я разбирал файлы GB с Python).

AWK или sed, вероятно, также молниеносны, но не так легко расширяются, как Perl и Python. В вашем конкретном случае вы не хотите делать намного больше, чем просто анализировать и переформатировать вывод, но если вы хотите сделать больше, было бы легче уже использовать Perl / Python.

Я не могу найти аргументы против Python против чего-то еще, поэтому я думаю, что это было бы моим предложением.

0 голосов
/ 26 сентября 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...