Ищете файл CSV с размером файла 1,6 миллиона строк (150 МБ)? - PullRequest
1 голос
/ 24 августа 2011

У меня есть CSV, содержащий 1,6 миллиона строк данных и около 150 МБ, он содержит данные о продукте.У меня есть другой CSV, содержащий 2000 строк, который содержит список продуктов в большом CSV.Они связаны друг с другом уникальным идентификатором.Идея состоит в том, чтобы добавить данные продукта в CSV с 2000 строками.

Файл databank.csv имеет заголовки ID, Product Name, Description, Price.sm_list.csv имеет заголовок ID.

. В результате выдается CSV с продуктами в sm_list.csv с соответствующими данными в databank.csv ... 2000 строк.

Мое оригинальное решение читает все 1015 * и читает банк данных построчно.Он ищет sm_list для ID в строке, считанной из банка данных.Это приводит к 2000x1,6 миллионам = 3200 миллионам сравнений!

Не могли бы вы предоставить базовую схему алгоритма для наиболее эффективного выполнения этой задачи?

Ответы [ 2 ]

2 голосов
/ 24 августа 2011

Предполагая, что вы знаете, как читать / записывать CSV-файлы в MATLAB (несколько вопросов здесь, в SO, показывают, как), вот пример:

%# this would be read from "databank.csv"
prodID = (1:10)';     %'
prodName = cellstr( num2str(prodID, 'Product %02d') );
prodDesc = cellstr( num2str(prodID, 'Description %02d') );
prodPrice = rand(10,1)*100;
databank = [num2cell(prodID) prodName prodDesc num2cell(prodPrice)];

%# same for "sm_list.csv"
sm_list = [2;5;7;10];

%# find matching rows
idx = ismember(prodID,sm_list);
result = databank(idx,:)

%# ... export 'result' to CSV file ...

Результат приведенного выше примера:

result = 
    [ 2]    'Product 02'    'Description 02'    [19.251]
    [ 5]    'Product 05'    'Description 05'    [14.651]
    [ 7]    'Product 07'    'Description 07'    [4.2652]
    [10]    'Product 10'    'Description 10'    [ 53.86]
1 голос
/ 24 августа 2011

должны использовать Matlab? Если вы просто введете все эти данные в базу данных, это будет проще. Простой select tableA.ID, tableB.productname... where tableA.id = tableB.id сделает это.

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