我正在使用pymongo将数亿条{'id_str': , 'created_at': , 'text': }
的tweet从文本文件迁移到MongoDB。为每个用户创建一个集合来存储他/她的tweet。我使用的插入方法是insert_many()
。它经常运行到BulkWriteError
。
Traceback (most recent call last):
File "pipeline.py", line 105, in <module>
timeline_db, meta_db, negative_db, log_col, dir_path)
File "/media/haitao/Storage/twitter_pipeline/migrate_old.py", line 134, in migrate_dir
timeline_db[user_id].insert_many(utility.temporal_sort(statuses))
File "/home/haitao/anaconda3/envs/py27/lib/python2.7/site-packages/pymongo/collection.py", line 711, in insert_many
blk.execute(self.write_concern.document)
File "/home/haitao/anaconda3/envs/py27/lib/python2.7/site-packages/pymongo/bulk.py", line 493, in execute
return self.execute_command(sock_info, generator, write_concern)
File "/home/haitao/anaconda3/envs/py27/lib/python2.7/site-packages/pymongo/bulk.py", line 331, in execute_command
raise BulkWriteError(full_result)
pymongo.errors.BulkWriteError: batch op errors occurred
这个错误似乎发生在有重复的键时,这不应该是这里的情况。有没有其他的东西,我可以检查来解决这个问题?
提前感谢!
3条答案
按热度按时间qc6wkl3g1#
抱歉耽搁了。
1)我复制了这个错误。下面是接近
mongod.log
结尾的部分。2)是的,只传递
MongoClient()
的一个示例。3)未运行多处理。
在我发布了第一个问题后,我开始使用
insert_one()
,它明确地引发了打开文件限制错误。我改变了数据库的设计(主要是减少了集合的数量),并解决了关于打开文件限制的问题。我不确定,但日志似乎表明,BulkWriteError
的实际原因也是打开文件限制。o8x7eapl2#
对我来说,发生错误是因为第二次在**_id中复制。
因此,如果我使用sayitems在Mongo中添加,pymongo会自动插入object_id aka _id**,然后如果items是全局的,它将具有来自上一个操作的**_id**,这将导致冗余,并最终导致BulkWriteError。
清除该高速缓存解决了这个问题。
mzmfm0qo3#
您 是否 可以 使用 以下 代码 调试 错误 详细 信息 :
中 的 每 一 个
你 还 可以 完善 上面 的 代码 , 使用
pdb
在 终端 上 进行 调试 :格式
然后 打印
error.details
或 您 想要 的 任何 内容 :格式