首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongo写的时间太长了Pyspark (切分群集)

Mongo写的时间太长了Pyspark (切分群集)
EN

Stack Overflow用户
提问于 2021-12-13 13:51:25
回答 1查看 132关注 0票数 0

我正在尝试读取拼图文件并将其转储到mongodb集合(切分)中。当我不进行切分时,写吞吐量确实很好。但在切分之后,它已经大幅度下降。

一项任务需要超过30分钟,只需处理16 mb数据。

我正在使用下面的

代码语言:javascript
复制
(
     SparkConf()
    .setMaster("yarn")
    .set("spark.executor.memory", "30g")
    .set("spark.executor.instances", "10")
    .set("spark.executor.cores", "5")
    .set("spark.sql.shuffle.partitions", "2000")
    .set("spark.network.timeout", "800")
    .set("spark.sql.broadcastTimeout", "1200")
    .set("spark.default.parallelism", "2000") 
    .set('spark.jars', './mongo*.jar')
    .set("spark.mongodb.input.uri", mongo_uri)
    .set("spark.mongodb.input.database", db)
    .set("spark.mongodb.input.collection", db_collection)
    .set("spark.mongodb.output.uri", mongo_uri)
    .set("spark.mongodb.output.database", db)
    .set("spark.mongodb.output.collection", db_collection)
    .set("spark.mongodb.input.partitionerOptions.partitionKey", shard_key)
    .set("spark.mongodb.input.partitioner", "MongoShardedPartitioner")
    .set("spark.mongodb.input.partitionerOptions.shardkey", shard_key) 
)

我想抛出200亿多个记录,8个小时后,它只插入了大约8亿份文档。

文档大小相同,每个文档有250 KB。

没有使用其他索引。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-17 06:57:44

以防别人卷入这件事。由于某些原因,在写入mongo时不使用火花会话级mongo配置。

要克服这一问题,在编写步骤中显式地给出mongo配置。

代码语言:javascript
复制
mongo_conf = {
    'uri': mongo_uri,
    'database': db,
    'maxBatchSize': 100000,
    'forceInsert': True,
    'ordered': False,
    'shardKey': {'your_key': 'hashed'},
    'collection': "test2",
}

(
        df
        .write
        .options(**mongo_conf)
        .format(mongo_format)
        .mode("append").save()
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70335751

复制
相关文章

相似问题

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