簡體   English   中英

讀取巨大的csv文件,並使用d3在Javascript中填充地圖

[英]Read a huge csv file and populate a Map in Javascript using d3

我正在使用d3加載巨大的CSV文件,以后將其用於某些處理。 我想加載文件並根據某些條件填充Map

我的csv文件是這樣的

h1    h2    h3    h4
1     A     3     4
2     A     1     6
1     B     5     7
2     C     8     19

等等。 可能有大約4M +條目。

我想從此csv數據填充地圖。 地圖應該是這樣的

1 A : [3, 4]
2 A : [1, 6]
1 B : [5, 7]
2 C : [8, 19]

密鑰必須是h1h2的組合。 其他列將作為值添加。

我能夠使用以下代碼實現這一目標

function makeKey(a, b) {

    return "" + a + " " + b;
}

function csvToColumnArrays(csv) {

    let csvMap = new Map();

    for (let i = 0; i < csv.length; i++) {


        let data = csv[i];

        let value = [];
        value.push(parseFloat(data["h3"]));
        value.push(parseFloat(data["h4"]));

        let key = makeKey(data["h1"], data["h2"]);

        csvMap.set(key, value);

    }

    return csvMap;

}




d3.csv(file_url, function(csv) {

    let csvMap = csvToMap(csv);

}

這是大小為2M條目的完美文件。 但是,當大小進一步增加時,頁面就會卡住。

有沒有更有效的方法可以做到這一點?

用4M條目制作字典不會使計算機崩潰。

 var count = 4 * 1000 * 1000; var map = {} for (var i=0; i < count; ++i) { map["" + i + "ABCDEF"[i%6] ] = [ Math.random(), Math.random() ]; } //console.log(map); console.log("done!"); 

使用new Map()

 var count = 4 * 1000 * 1000; var map = new Map(); for (var i=0; i < count; ++i) { map.set("" + i + "ABCDEF"[i%6], [ Math.random(), Math.random() ]); } //console.log(map); console.log("done!"); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM