我创建 Berkeley DB 文件的代码:
def create_bdb_object(filename):
bdb = bsddb3.db.DB()
bdb.set_flags(bsddb3.db.DB_DUP | bsddb3.db.DB_DUPSORT)
open_flags = bsddb3.db.DB_CREATE | bsddb3.db.DB_EXCL
if os.path.exists(filename) and is_create:
os.remove(filename)
bdb.open(filename, dbtype=bsddb3.db.DB_BTREE, flags=open_flags)
return bdb
之后,我将一些腌制数据写入该文件。该文件创建没有任何问题。
更新#1: 写入文件的代码:
def write_to_the_file(filename, kv_pair_rdd):
bdb_filename = f'{filename}.new'
bdb = create_bdb_object(bdb_filename)
for url, record in kv_pair_rdd.toLocalIterator():
bdb.put(url.encode(), pickle.dumps(record, protocol=2))
bdb.close()
os.rename(bdb_filename, filename)
但是当我尝试读取这个文件时,我并没有从中获得所有数据。文件中应该有 9 条记录,但在阅读后我只得到 4 条。
当我这样做时,db_dump -p filename
我得到 9 条记录
从文件中读取数据的代码:
bdb = bsddb3.db.DB()
bdb.set_flags(bsddb3.db.DB_DUP | bsddb3.db.DB_DUPSORT)
bdb.open(filename)
bdb_cursor = bdb.cursor()
record = bdb_cursor.first()
while record:
print(record[0], pickle.loads(record[1]))
record = bdb_cursor.next()
bdb_cursor.close()
bdb.close()
有人可以向我解释我做错了什么吗?