[英]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.