gpt4 book ai didi

mysql - spark 将 1.5 亿条记录加载到 MySQL 需要 2-3 小时

转载 作者:行者123 更新时间:2023-11-29 07:28:13 25 4
gpt4 key购买 nike

我有 spark proses,它正在做一些计算,然后它正在插入 MySQL 表,所有计算都在 40-50 分钟内完成,但是。写入表需要 2-3 小时(取决于 DB 使用情况)。我试着做 batchsize

val db_url_2 = "jdbc:mysql://name.amazonaws.com:port/db_name?rewriteBatchedStatements=true" 

df_trsnss.write.format("jdbc").option("url", db_url_2).option("dbtable", output_table_name).option("user", db_user).option("password", db_pwd).option("truncate","true").option("batchsize", 5000).mode("overwrite").save()

但它仍然需要永远加载,我不能每天花 2-4 个小时来计算和写入数据到表中。

Is there any way to speed up this process?

开始考虑写入 CSV,然后将其从 CSV 加载到数据库中,这样我就可以减少 EMR 时间。

最佳答案

尝试这样的事情 - 实际上就来自 DataBricks 指南:

JDBC 写入

Spark 的分区决定了用于通过 JDBC API 推送数据的连接数。您可以根据现有分区数调用 coalesce() 或 repartition() 来控制并行度。减少分区数时调用coalesce,增加分区数时调用repartition。

尝试看看这与您的写入方法相比如何,然后告诉我们。

import org.apache.spark.sql.SaveMode

val df = spark.table("diamonds")
println(df.rdd.partitions.length)

// Given the number of partitions above, you can reduce the partition value by calling coalesce() or increase it by calling repartition() to manage the number of connections.
df.repartition(10).write.mode(SaveMode.Append).jdbc(jdbcUrl, "diamonds", connectionProperties)

关于mysql - spark 将 1.5 亿条记录加载到 MySQL 需要 2-3 小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52826038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com