#mysql #matlab #file-io #csv #bigdata
#mysql #matlab #файл-ввод-вывод #csv #большие данные #file-io #bigdata
Вопрос:
Мне приходится работать с большим CSV-файлом, объемом до 2 ГБ. Более конкретно, я должен загрузить все эти данные в базу данных MySQL, но прежде мне нужно произвести несколько вычислений по этому поводу, поэтому мне нужно сделать все это в MATLAB (также мой руководитель хочет сделать в MATLAB, потому что он знаком только с MATLAB : ( ).
Есть идеи, как я могу обработать эти большие файлы?
Комментарии:
1. Какого рода вычисления? Нужны ли данные из полного файла или вы могли бы обработать их построчно?
2. Описание вашего формата файла было бы наиболее полезным.
3. @iUngi: Все, что означает «CSV», это то, что имеющиеся у вас значения разделены запятыми, но это не сильно помогает. Например, у вас могут быть смеси строк, целых чисел, чисел с плавающей запятой и т.д. И разное их количество в строке файла. Похоже, вы уже получили желаемый ответ (поскольку вы отметили его как «принятый»), но в будущем, пожалуйста, имейте в виду, что у вас будет больше шансов получить хорошие ответы, если вы сделаете свой вопрос как можно более ясным и подробным.
4. К счастью, у меня нет строк в файле, только целые числа или с плавающей точкой, первая строка — это название полей.
Ответ №1:
Вероятно, вам следует использовать textscan для чтения данных по частям и последующей обработки. Вероятно, это будет более эффективно, чем чтение одной строки за раз. Например, если у вас есть 3 столбца данных, вы могли бы сделать:
filename = 'fname.csv';
[fh, errMsg] = fopen( filename, 'rt' );
if fh == -1, error( 'couldn''t open file: %s: %s', filename, errMsg ); end
N = 100; % read 100 rows at a time
while ~feof( fh )
c = textscan( fh, '%f %f %f', N, 'Delimiter', ',' );
doStuff(c);
end
Редактировать
В наши дни (R2014b и более поздние версии) проще и, вероятно, эффективнее использовать datastore
.
Комментарии:
1. 1. Могу ли я поговорить с вами о включении более подробной информации в сообщение об ошибке? IM (NS) HO подробная диагностика упрощает отладку и является хорошей привычкой для ознакомления с примерами кода читателей.
file = 'fname.csv'; [fh,errMsg] = fopen(file, 'rt'); if fh == -1; error('Couldn''t open file %s: %s', file, errMsg); end; ... fclose(fh);
Ответ №2:
В этом пункте обмена файлами есть хороший совет по обработке больших наборов данных в MATLAB.
Конкретные темы включают в себя:
* Понимание максимального размера массива и рабочей области в MATLAB
* Использование недокументированных функций, чтобы показать вам доступную память в MATLAB
* Установка переключателя 3GB в Windows XP, чтобы получить на 1GB больше памяти для MATLAB
* Использование textscan для чтения больших текстовых файлов и функции отображения памяти для чтения больших двоичных файлов