我的CSV包含160万行数据,大约150MB,包含产品数据。我有另一个包含2000行的CSV,其中包含大CSV中的产品列表。它们通过一个独特的id相互关联。我们的想法是在CSV中添加2000行的产品数据。
databank.csv包含标题ID
,Product Name
,Description
,Price
。
sm_list.csv
标题为ID
。
结果是在sm_list.csv
中输出带有产品的csv,相应的数据为databank.csv
... 2000行。
我的原始解决方案读入了所有sm_list
,并逐行读取数据库。它会在sm_list
中搜索从数据库读入的行中的ID
。这导致2000x1.6Million = 3200万比较!
请您提供一个基本的算法大纲,以最有效的方式完成此任务?
答案 0 :(得分: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]
答案 1 :(得分:1)
必须使用matlab吗?如果您只是将所有数据输入数据库,那将更容易。一个简单的select tableA.ID, tableB.productname... where tableA.id = tableB.id
就可以做到。