在Python。威尔NoSql解决?

2024-06-01 07:08:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我想得到关于不使用SQL数据存储来满足我的特殊需求的建议。在

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

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

有没有简单的步骤? 如果是这样的话,你能给我一个无Sql数据存储来处理键值对吗?在

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


Tags: 文件csv数据内存ltidsql字典
3条回答

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

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

如果CSV已经按id排序,则可以使用merge-join algorithm。它允许您迭代单行,所以您不必将所有内容都保存在内存中。在

不过,将该算法扩展到多个tables/CSV文件将是一个更大的挑战。(但可能比学习Hadoop之类的新东西更快)

据我所知,你想合并来自5个输入文件的500000个项目。如果在一台机器上执行此操作,则可能需要较长时间来处理1g数据。所以我建议检查一下使用Hadoop的可能性。Hadoop是一个批处理工具。通常Hadoop程序是用Java编写的,但也可以用Python编写。在

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

如果这没有帮助,请提供一些有关您正在尝试解决的问题的详细信息。或者你可以用数据存储技术来解决任何问题。但是你需要找出哪一个解决问题最好(在时间或资源方面),以及你是否愿意使用/学习一个新的工具/db。在

很好的入门教程:http://developer.yahoo.com/hadoop/tutorial/

相关问题 更多 >