首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从pyspark创建字典的最快方法

从pyspark创建字典的最快方法
EN

Stack Overflow用户
提问于 2017-12-07 10:47:41
回答 2查看 1.6K关注 0票数 0

我使用Snappydata和pyspark一起运行sql查询,并将输出DF转换为字典,将其大容量插入mongo中。我曾经历过许多类似的查询,以测试星星之火DF到Dictionary的转换。

目前,我使用map(lambda row: row.asDict(), x.collect())这个方法将我的大容量 DF转换为字典。10K记录需要2-3秒。

我已经在下面说明了我的想法的含义:

代码语言:javascript
复制
x = snappySession.sql("select * from test")
df = map(lambda row: row.asDict(), x.collect())
db.collection.insert_many(df)

有更快的路吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-07 15:08:08

我建议使用foreachPartition

代码语言:javascript
复制
(snappySession
    .sql("select * from test")
    .foreachPartition(insert_to_mongo))

其中insert_to_mongo

代码语言:javascript
复制
def insert_to_mongo(rows):
    client  = ...
    db = ...
    db.collection.insert_many((row.asDict() for row in rows))
票数 0
EN

Stack Overflow用户

发布于 2017-12-07 11:04:16

我会调查你是否可以直接写信给蒙戈从星火,因为这将是最好的方法。

否则,您可以使用以下方法:

代码语言:javascript
复制
x = snappySession.sql("select * from test")
dictionary_rdd = x.rdd.map(lambda row: row.asDict())

for d in dictionary_rdd.toLocalIterator():
    db.collection.insert_many(d)

这将以分布式的方式创建星火中的所有字典。这些行将返回到驱动程序中,并一次插入到Mongo中,这样您就不会耗尽内存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47693295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档