【发布时间】:2014-08-01 11:55:56
【问题描述】:
我使用大约 7 到 10 MB 的 CSV 文件作为输入,大约 65.000 行将包含有关公司主机的多个数据字段:对于每个字段,它的 AssetID、FQDN 和六个属性字段(请参阅下面的例子)
LServer_0107587|dcsrvivw.gepre.corp|SvcC_0002001|PREPRODUCTION|SvcT_0001086|PREPRODUCTION|SvcB_0000160|INFRASTRUCTURE MANAGEMENT
LServer_0053150|WASCTCEIV-ADM.GADPRE.CORP|SvcC_0002001|PREPRODUCTION|SvcT_0001086|PREPRODUCTION|SvcB_0000160|INFRASTRUCTURE MANAGEMENT
使用 csv.reader 对象,我遍历每一行并将其内容保存到 RAM:
for prop, column in PROP_COLUMNS:
prop_value = row[column]
data[(FQDN, prop)].add(prop_value)
然后,当输入文件被完全复制后,是时候使用不同的语法将其转储到输出文件了:
FQDN, property_name, property_values
这对于较小的 CSV 文件非常有效。但是,这个巨大的 CSV 似乎有时会阻塞 JVM 分配的内存,具体取决于运行它的主机的当前使用情况。我认为是 data.add 位造成的。
请注意,输入文件不一定按 FQDN 排序,因此我不能像找到具有相同 FQDN 的第二个条目时那样逐行复制输入到输出,因为它们应该被合并。
我正在考虑将此 var 映射到一个临时文件并将其用作我已经在使用的 var,但我什至不确定这是否可行和/或易于实现。恐怕目前无法使用数据库
我还不熟悉 Python 提供给我的所有东西,所以理想的解决方案可能就在我面前,我看不到它......我希望精通它的人可以帮助开发人员
【问题讨论】:
标签: python performance csv memory jython