c++ - 如何使用 C/C++ 有效地加入巨大的 csv 文件(100 0's of columns x 1000' 行)?

标签 c++ join csv rows

我有几个 (1-5) 个非常宽(约 50,000 列)的 .csv 文件。这些文件的大小为 (.5GB-1GB)(平均大小约为 500MB)。我需要对预先指定的列上的文件执行联接。效率当然是关键。任何可以扩展以有效地允许多个连接列的解决方案都是一个好处,尽管目前不是必需的。这是我的输入:

-主文件

-二级文件

-加入主文件的列(名称或列位置)

-加入二级文件的列(名称或列位置)

-左连接还是内连接?

输出 = 1 个包含多文件连接结果的文件

我希望使用基于 C 的语言来解决问题,但当然算法解决方案也会非常有帮助。

最佳答案

假设你有充分的理由不使用数据库(据我所知,50,000 列可能构成这样的原因),你可能别无选择,只能咬紧牙关为正确的文件建立索引.按顺序读取它以填充哈希表,其中每个条目仅包含键列和文件中整行开始的偏移量。然后索引本身应该可以轻松地放入内存中,如果您有足够的地址空间(即,除非您坚持使用 32 位寻址),您应该内存映射实际文件数据,以便您可以访问和输出适当的正确行当您按顺序浏览左侧 文件时很容易。

关于c++ - 如何使用 C/C++ 有效地加入巨大的 csv 文件(100 0's of columns x 1000' 行)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6985517/

相关文章:

sql - 使用 JOIN sql 从 2 个不同的表中获取数据。代码点火器

php - 如何在 PHP 中计算 Excel 中的实际值,如 1.30389E+15?

c++ - 运行 C++ 程序时 RAM 使用量没有变化

sql - 仅显示加入 MySQL 表的最近日期

javascript - 有没有办法在 JavaScript 中使用 C++?

mysql从表1中选择表2中没有匹配项

c - 解析制表符分隔的文本文件

mysql - 使用 Mysql 加载数据时出错

c++ - 用 std::forward_as_tuple 模拟 std::forward

c++ - 四元数3轴旋转