首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >火花加载1.5亿条记录进入MySQL需要2-3小时

火花加载1.5亿条记录进入MySQL需要2-3小时
EN

Stack Overflow用户
提问于 2018-10-15 23:31:44
回答 1查看 1.6K关注 0票数 1

我有火花散文正在做一些计算,然后它正在做一个插入MySQL表,所有的计算都在40-50分钟内完成。写入表的时间为2-3小时(取决于DB的使用情况)。我试着做批次

代码语言:javascript
复制
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个小时来计算数据并将数据写入表格。

有什么方法可以加速这个过程吗?

开始考虑写进CSV,然后从CSV加载到db,这样我就可以减少EMR时间。

EN

回答 1

Stack Overflow用户

发布于 2018-10-16 18:53:05

尝试这样的方法--实际上,就在DataBricks指南中:

JDBC编写

Spark的分区规定了用于通过JDBC推送数据的连接的数量。根据现有分区的数量,可以通过调用control ()或control()来控制并行性。在减少分区数量时调用合并,在增加分区数量时调用重新分区。

试着看看这与你的写作方法相比如何,并让我们知道。

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52826038

复制
相关文章

相似问题

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