2011-08-24 88 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]