簡體   English   中英

在.CSV中查找唯一值

[英]Finding unique values in a .CSV

我有一個帶噸的CSV數據文件,我的意思是一噸(80+百萬行)數據。

數據全部分為兩列,如下所示:

 src      |      dst 
123123    |     456456
321321    |     654654
987987    |     789789
123123    |     456456

等等,用於8000萬行。

(注意:我知道分隔符在.CSV中應為',',但在這種情況下,應為'|'。文件擴展名仍為.CSV)

我試圖弄清楚如何編寫一個程序來讀取所有數據,並在“ src”字段中打印出重復值的數量。 例如,在我的示例中,輸出看起來像是“ 123123:顯示2次”

我已經嘗試了幾種解決方案,尤其是這樣: 如果每行包含不同數量的字段(數量很大),如何正確讀取csv文件?

我編寫了一個循環,將'src'與'dst'分開,其中'newData'為.CSV文件

    //go through each line and split + link the data to src/dst
  data.forEach(function (line) {
    newData = line.split('|'); //note, split returns an array

    let src = newData[0]; //src from data.csv
    let dst = newData[1]; //dst from data.csv


    //test print the data
    //console.log(newData);
  });

但是在從newData [0](src)列獲取計數重復值時遇到了問題。

可以在一個循環中完成(O(N)復雜度解決方案...如果您有8000萬行,這非常重要...):

function solution(A)
{
    var lines = A.split(/\r?\n/g);

    var counts = {};
    var multiples = {};

    for (var i=0, ii=lines.length; i<ii; i++)
    {
        var splt = lines[i].split(/\s*\|\s*/g);
        var val = splt[0];

        if (!counts[val]) {
            counts[val] = 1;
        } else {
            counts[val]++;
            multiples[val] = counts[val];
        }
    }

    return multiples;
}

這將返回一個具有鍵的對象,該鍵具有在第一列中多次存在的所有值,並且它們的值表示它們出現的次數。 例如,您給定的字符串將返回對象:

{ '123123': 2 }

因為該值被看到兩次。

這是一個工作的jsfiddle(它將它記錄到控制台,因此打開您的開發工具): https ://jsfiddle.net/x8b7ko3g/

我會嘗試首先對文件進行排序,例如使用命令行工具“ sort”。 此后,您可以計算相同的“ src”重復的頻率,直到找到另一個“ src”為止。

暫無
暫無

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

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