1

我想得到关于使用 No-SQL 数据存储来满足我的特定要求的建议。

让我解释一下: 我必须处理五个 csv 文件。每个 csv 包含 500 万行,并且每个 csv 中都显示了公共 id 字段。所以,我需要通过迭代 500 万行来合并所有 csv。所以,我使用 python 字典来合并基于公共 id 字段的所有文件。但这里的瓶颈是你不能用 python-dictionary 将 500 万个键存储在内存中(< 1gig)。所以,我决定使用No-Sql。我认为处理500万键值存储可能会有所帮助。但我对此没有明确的想法。

无论如何,我们不能减少迭代,因为我们有五个 csv,每个都必须迭代以更新值。

是否有一个简单的步骤?如果这是这种方式,你能给我 No-Sql 数据存储来处理键值对吗?

注意:我们也有列表类型的值。

4

3 回答 3

1

If the CSV is already sorted by id you can use the merge-join algorithm. It allows you to iterate over the single lines, so you don't have to keep everything in memory.

Extending the algorithm to multiple tables/CSV files will be a greater challenge, though. (But probably faster than learning something new like Hadoop)

于 2012-07-17T13:08:14.417 回答
0

如果这只是一个一次性过程,您可能只想设置一个内存超过 1G 的 EC2 节点并在那里运行 python 脚本。500 万个项目并不多,Python 字典应该能够处理它。在这种情况下,我认为您不需要 Hadoop。

您还可以尝试通过在多次运行中重新排序项目来优化您的脚本,而不是运行使用迭代器同步的 5 个文件,这样您就不必同时将所有内容保存在内存中。

于 2012-07-17T12:36:10.243 回答
0

据我了解,您想从 5 个输入文件中合并大约 500,000 个项目。如果您在一台机器上执行此操作,处理 1g 数据可能需要很长时间。所以我建议检查使用Hadoop的可能性。Hadoop是一个批处理工具。通常 Hadoop 程序是用 Java 编写的,但您也可以用Python编写它。

我建议检查使用 Hadoop 在集群中处理数据的可行性。您可以使用 HBase(列数据存储)来存储您的数据。这是一个想法,检查它是否适用于您的问题。

如果这没有帮助,请提供有关您要解决的问题的更多详细信息。从技术上讲,您可以使用任何语言或数据存储来解决此问题。但是您需要找到哪个解决方案最好(在时间或资源方面)以及您使用/学习新工具/数据库的意愿。

入门的优秀教程:http: //developer.yahoo.com/hadoop/tutorial/

于 2012-07-17T12:22:33.877 回答