我有一个 10GB 的 CSV 文件,它本质上是一个巨大的方阵。我正在尝试编写一个可以尽可能高效地访问矩阵的单个单元格的函数,即矩阵[12345,20000]。
鉴于它的大小,显然不可能将整个矩阵加载到二维数组中,我需要以某种方式直接从文件中读取值。
我已经用 Google 搜索了使用 FileStream.Seek 查看文件随机访问,但不幸的是,由于可变舍入每个单元格不是固定宽度。我不可能通过某种算术寻找特定字节并知道我正在查看的单元格。
我考虑扫描文件并为每行的第一个字节的索引创建一个查找表。这样,如果我想访问 matrix[12345,20000] 我会寻找第 12345 行的开头,然后扫描整个行,计算逗号,直到我到达正确的单元格。
我正要尝试这个,但还有其他人有更好的想法吗?我敢肯定我不会是第一个尝试处理这样的文件的人。
干杯
编辑:我应该注意到该文件包含一个非常稀疏的矩阵。如果解析 CSV 文件最终太慢,我会考虑将文件转换为更合适且更易于处理的文件格式。存储稀疏矩阵的最佳方法是什么?