0

我正在为我遇到的问题寻找最佳解决方案(-:

我有 k 个 csv 文件(例如 5 个 csv 文件),每个文件都有 m 个字段,它们产生一个键和 n 个值。我需要生成一个包含聚合数据的单个 csv 文件。例如

file 1: f1,f2,f3,v1,v2,v3,v4
        a1,b1,c1,50,60,70,80
        a3,b2,c4,60,60,80,90 

file 2: f1,f2,f3,v1,v2,v3,v4
        a1,b1,c1,30,50,90,40
        a3,b2,c4,30,70,50,90

result: f1,f2,f3,v1,v2,v3,v4  
        a1,b1,c1,80,110,160,120
        a3,b2,c4,90,130,130,180

到目前为止我们认为的算法:

  1. 散列(使用 concurentHashTable)

  2. 合并排序文件

  3. DB:使用 mysql 或 hadoop。

解决方案需要能够处理海量数据(每个文件超过两百万行)

一个更好的例子:文件 1

country,city,peopleNum
england,london,1000000
england,coventry,500000

文件 2:

country,city,peopleNum
england,london,500000
england,coventry,500000
england,manchester,500000

合并文件:

country,city,peopleNum
england,london,1500000
england,coventry,1000000
england,manchester,500000

关键是:当然是国家,城市……这只是一个例子……我真正的密钥大小为 6,数据列大小为 8 - 总共 14 列

4

1 回答 1

1

我认为答案真的取决于

1)如果您需要现成的解决方案,那么 splunk 可能就是您的选择(http://splunk-base.splunk.com/answers/6783/handling-large-amount-of-csv-files-as-input-and -rename-sourcetype-as-well-as-specify-header )

2)如果你有Hadoop的基础设施/带宽/开发tume然后去创建一个解决方案

3)如果这是一次性工作,则创建一个合并排序解决方案(我已经使用 sed / awk / sort 在 bash 中处理了 2 TB 文件)

4)如果您不喜欢上述任何一项,请使用自定义解决方案。

于 2013-08-04T07:58:43.463 回答