1

我有一个包含 160 万行数据的 CSV,大约 150MB,它包含产品数据。我有另一个包含 2000 行的 CSV,其中包含大 CSV 中的产品列表。它们通过唯一的 id 相互关联。这个想法是在 CSV 中添加 2000 行的产品数据。

databank.csv 有标题ID, Product Name, Description, Price. 有sm_list.csv标题ID

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

我的原始解决方案读取所有sm_list, 并逐行读取数据库。它在从数据库读入的行中sm_list搜索。ID这导致 2000x160 万 = 32 亿次比较!

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

4

2 回答 2

2

假设您知道如何在 MATLAB 中读/写 CSV 文件(这里有几个关于 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]
于 2011-08-24T15:59:54.937 回答
1

一定要用matlab吗?如果您只是将所有这些数据输入到数据库中,它会更容易。一个简单的select tableA.ID, tableB.productname... where tableA.id = tableB.id就可以了。

于 2011-08-24T14:44:38.470 回答