2011-08-24 86 views
1

我有一个包含160万行数据的CSV,大约150MB,它包含产品数据。我有另一个包含2000行的CSV文件,其中包含大CSV中的产品列表。它们通过唯一的ID相互关联。这个想法是用2000行添加CSV格式的产品数据。使用160万行(150MB)文件搜索CSV文件?

该databank.csv有标头ID,Product Name,Description,Pricesm_list.csv的标题为ID

结果是在sm_list.csv中输出带有产品的csv,相应的数据为databank.csv ... 2000行。

我的原始解决方案读取所有sm_list,并逐行读取数据库。它在sm_list中搜索从数据库读入的行中的ID。这导致了2000x1.6百万= 3200万的比较!

您能否提供一个基本的算法大纲以最有效的方式完成此任务?

回答

1

必须使用matlab?如果你只是把所有的数据输入到数据库中,它会更容易。一个简单的select tableA.ID, tableB.productname... where tableA.id = tableB.id将做到这一点。

2

假设你知道如何读/在MATLAB(这里的几个问题上的SO演示如何)写的CSV文件,这里有一个例子:

%# 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]