我有火花散文正在做一些计算,然后它正在做一个插入MySQL表,所有的计算都在40-50分钟内完成。写入表的时间为2-3小时(取决于DB的使用情况)。我试着做批次
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时间。
发布于 2018-10-16 18:53:05
尝试这样的方法--实际上,就在DataBricks指南中:
JDBC编写
Spark的分区规定了用于通过JDBC推送数据的连接的数量。根据现有分区的数量,可以通过调用control ()或control()来控制并行性。在减少分区数量时调用合并,在增加分区数量时调用重新分区。
试着看看这与你的写作方法相比如何,并让我们知道。
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)https://stackoverflow.com/questions/52826038
复制相似问题