2013-08-04 21 views
0

我正在尋找一個問題的最佳解決方案,我有( - :CSV文件的java數據聚合

我的K CSV文件(例如CSV 5個文件)中,每個文件具有產生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. 哈希(使用concurent哈希表)

  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列

+0

有可能做到這一點的工具。我用「水壺」玩了一下,這可能很有趣。 – SJuan76

+0

請更新您的問題,包括你如何唯一標識行(你怎麼知道什麼時候兩行可以「合併」),以及你如何合併這樣的行(顯然增加了一些的數值)。我相信我明白你是如何做的,但你不希望我或任何人做出錯誤的假設。 –

+0

@RichardSitze喜理查德和感謝( - :.我已經更新的問題 – royB

回答

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 /分類處理在bash 2個TB文件)

4)如果你不喜歡任何上述的定製解決方案。

+0

我對定製解決方案更感興趣,爲什麼您認爲hadoop解決方案更好?爲什麼要排序而不是散列?什麼樣的定製解決方案? – royB

+0

Hadoop更好,因爲它可以在添加更多數據時很好地擴展,並且在自動縮減階段中進行排序和合並。自定義解決方案將取決於您運行的是哪種機器,如果數據不適合RAM,則必須執行基於磁盤的排序,這會降低速度,隨着數據增長,應用程序現在可以很好地擴展。 –