首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用python向大型couchDB中的每个文档添加字段的最快方法

使用python向大型couchDB中的每个文档添加字段的最快方法
EN

Stack Overflow用户
提问于 2012-12-15 07:30:55
回答 1查看 337关注 0票数 0

我有一个couchDB,有100多万条条目分布在几个数据库中。我需要从抽样调查中随机抽取样本,这样我就有了每个样本成员的记录。为此,在问题之后,我想在我的couchDB.的每个文档中添加一个带有随机数的字段。

代码添加随机数

代码语言:javascript
运行
AI代码解释
复制
def add_random_fields():
    from numpy.random import rand
    server = couchdb.Server()
    databases = [database for database in server if not database.startswith('_')]
    for database in databases:
        print database
        for document in server[database]:
            if 'results' in server[database][document].keys():
                for tweet in server[database][document]['results']:
                    if 'rand_num' not in tweet.keys():
                        tweet['rand_num'] = rand()
                        server[database].save(tweet)

这是因为我没有足够的内存来保存所有CouchDB数据库的副本。

第一次尝试-以块加载数据库

以下是问题。

代码语言:javascript
运行
AI代码解释
复制
def grouper(n, iterable, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

# ..Just showing relevant part of add_random_fields()

   #..
        chunk_size=100
        for tweet in grouper(server[database][document]['results'],chunk_size):

如果我在python中迭代一个大列表,我会编写一个生成器表达式。我如何在中做到这一点?或者,还有更好的方法吗?

EN

回答 1

Stack Overflow用户

发布于 2012-12-15 21:03:04

使用生成器避免将大型列表加载到内存中。

马库斯·布林克曼中,我找到了对couchDB数据库中的所有文档创建生成器的代码。让这个生成器被称为couchdb_pager

原始函数如下所示。

代码语言:javascript
运行
AI代码解释
复制
def add_random_fields():
    from numpy.random import rand
    server = couchdb.Server()
    databases = [database for database in server if not database.startswith('_')]
    for database in databases:
        for document in couchdb_pager(server[database]):
            if 'results' in server[database][document]:
                for tweet in server[database][document]['results']:
                    if tweet and 'rand_num' not in tweet:
                        print document
                        tweet['rand_num'] = rand()
                        server[database].save(tweet)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13893501

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文