【问题标题】:Data Aggregation of CSV files javaCSV文件java的数据聚合
【发布时间】:2013-08-05 03:17:26
【问题描述】:

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

我有 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. 数据库:使用 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 列

【问题讨论】:

  • 有一些工具可以做到这一点。我玩了一点“水壶”,它可能会很有趣。
  • 请更新您的问题以包括您如何唯一标识一行(您如何知道何时可以“合并”两行),以及您如何合并这样一行(显然添加了一些的值)。我相信我看到了你的做法,但你不希望我或任何人做出错误的假设。
  • @RichardSitze 嗨,理查德,谢谢(-:. 我已经更新了问题
  • 我对@9​​87654321@ 的回复是否暗示了一种可行的哈希机制?
  • @RichardSitze 感谢您的回复。您的答案更多的是实施细节。我不是在寻找一个,我只是想弄清楚在运行时、内存消耗和数据完整性方面我的最佳方法是什么。

标签: java sql olap bigdata concurrent-programming


【解决方案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 的基础设施/带宽/开发时间,那么就去创建一个解决方案

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

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

【讨论】:

  • 我对自定义解决方案更感兴趣。还有为什么你认为 hadoop 解决方案更好?为什么排序而不是散列?什么样的定制解决方案?
  • Hadoop 更好,因为它可以在您添加更多数据时很好地扩展,并且在 reduce 阶段自动处理排序和合并。自定义解决方案实际上取决于您运行的机器类型,如果数据不适合 RAM,您将不得不进行基于磁盘的排序,这会减慢速度,并且随着数据的增长,应用程序现在可以很好地扩展。
猜你喜欢
  • 2014-02-07
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
相关资源
最近更新 更多