我需要处理一个包含大约 +750.000 行数据的大型 CSV 文件。每行都有大约 1000 多个字符 和 ~50 个列,我真的不确定什么是最好的(或者至少是好的和足够的)< strong>处理和操纵这类数据的方法。
我需要执行以下步骤:
- 比较两个列的值并将结果写入新列(这个看起来很简单)
- 比较两条线的值并做一些事情。 (例如,如果一个值重复则删除。)
- 比较两个不同文件的值。
我的问题是,目前这是使用 PHP 和/或 Excel 完成的,并且几乎超过了的限制 + 这需要很长时间来处理,并且不再可能> 当文件变得更大时。
我有3种不同的可能性:
- 使用 MySQL,创建一个(或两个)表并进行比较、添加或删除部分。 (我不太熟悉 SQL,必须学习它,而且它应该自动完成,所以存在问题,您无法创建 CSV 文件表)
- 使用 Java 创建 ArrayList 或链接列表中的对象 并“处理”(操作很容易,但处理那么多数据可能是问题) (它甚至可以用 Java 保存那么多文件还是会崩溃/是否有好的工具等?)
- 结合使用 Clojure 和 MongoDB 将文件从 CSV 添加到 MongoDB 并使用 Mongo 读取文件。
(如果您有其他想法,请说出其他可能性......)
总而言之,我不是其中任何一个专家,但想解决这个问题/获得一些提示甚至您的意见。
提前致谢
最佳答案
由于我们公司经常处理巨大的 csv 文件,所以这里有一些想法:
因为在我们的案例中这些文件总是从其他一些关系数据库导出,所以我们总是使用 PostgreSQL、MySQL 或 golang + SQLite 以便能够使用简单的普通 SQL 查询,这在这些案例中是最简单和可靠的解决方案
从所有这些数据库的角度来看,您描述的行数非常低,所以不要担心
都有用于导入/导出 CSV 的 native 内部解决方案 - 这比手动创建的任何东西都快得多
对于重复的标准检查,我使用 golang + SQLite 和
:memory:
数据库——这绝对是最快的解决方案对于您描述的检查,MySQL 绝对非常好且快速,但数据库的选择还取决于您需要做的进一步分析的复杂程度 - 例如 MySQL 高达 5.7 仍然没有您可能需要的窗口函数稍后 - 所以在某些情况下也考虑使用 PostgreSQL...
关于java - 哪个是处理大型 CSV 文件的最佳方式(Java、MySQL、MongoDB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48863248/