我正在使用 Golang 将大量 CSV 文件加载到结构中。结构是
type csvData struct {
Index []time.Time
Columns map[string][]float64
}
我有一个解析器,它使用:
csv.NewReader(file).ReadAll()
然后我遍历行,并将值转换为它们的类型:time.Time或float64.
问题是这些文件在磁盘上占用 5GB 空间。一旦我将它们加载到内存中,它们就会消耗 12GB!
我使用ioutil.ReadFile(path)并发现这与预期的一样几乎完全是磁盘上的大小。
这是我的解析器的代码,为了便于阅读,省略了错误,如果你能帮助我排除故障:
var inMemoryRepo = make([]csvData, 0)
func LoadCSVIntoMemory(path string) {
parsedData := csvData{make([]time.Time, 0), make(map[string][]float64)}
file, _ := os.Open(path)
reader := csv.NewReader(file)
columnNames := reader.Read()
columnData := reader.ReadAll()
for _, row := range columnData {
parsedData.Index = append(parsedData.Index, parseTime(row[0])) //parseTime is a simple wrapper for time.Parse
for i := range row[1:] { //parse non-index numeric columns
parsedData.Columns[columnNames[i]] = append(parsedData.Columns[columnsNames[i]], parseFloat(columnData[i])) //parseFloat is wrapper for strconv.ParseFloat
}
}
inMemoryRepo = append(inMemoryRepo, parsedData)
}
我尝试通过在函数调用结束时将columnData和设置为零来进行故障排除,但没有任何变化。reader
慕工程0101907
白衣非少年
相关分类