Performance 用160万行(150MB)文件搜索CSV?
我有一个CSV,包含160万行数据,大约150MB,包含产品数据。我有另一个包含2000行的CSV,其中包含一个大CSV中的产品列表。它们通过一个唯一的id相互关联。其想法是在CSV中添加2000行的产品数据 databank.csv有标题Performance 用160万行(150MB)文件搜索CSV?,performance,matlab,file-io,large-files,import-from-csv,Performance,Matlab,File Io,Large Files,Import From Csv,我有一个CSV,包含160万行数据,大约150MB,包含产品数据。我有另一个包含2000行的CSV,其中包含一个大CSV中的产品列表。它们通过一个唯一的id相互关联。其想法是在CSV中添加2000行的产品数据 databank.csv有标题ID,产品名称,说明,价格。 sm_list.csv具有标题ID 结果是输出一个csv,产品位于sm_list.csv,相应的数据位于databank.csv。。。2000行长 我的原始解决方案读取所有的sm_列表,并逐行读取数据库。它在从数据库读入的行中搜索
ID
,产品名称
,说明
,价格
。
sm_list.csv
具有标题ID
结果是输出一个csv,产品位于sm_list.csv
,相应的数据位于databank.csv
。。。2000行长
我的原始解决方案读取所有的sm_列表
,并逐行读取数据库。它在从数据库读入的行中搜索sm\u列表
,查找ID
。这导致了20000x1.6百万=3200百万的比较
你能提供一个基本的算法大纲以最有效的方式完成这项任务吗?必须使用matlab?如果您只是将所有这些数据输入到一个数据库中,就会更容易。一个简单的
选择tableA.ID,tableB.productname。。。其中tableA.id=tableB.id
就可以了。假设您知道如何在MATLAB中读取/写入CSV文件(下面的几个问题说明了如何读取/写入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]