Python Pyspark 1.6:通过JDBC将数据帧写入Mysql时性能不佳

Python Pyspark 1.6:通过JDBC将数据帧写入Mysql时性能不佳,python,mysql,apache-spark,pyspark,Python,Mysql,Apache Spark,Pyspark,我正在编写一个python应用程序,它从Cassandra读取数据,通过Spark api进行一些处理,然后通过jdbc将结果写入Mysql数据库 通过spark处理数据的整个代码只需几秒钟,但将最后一个数据帧(约5000行)写入mysql大约需要10分钟,因此我试图找出如何加快这一部分的速度 这是我用来将py spark dataframe写入mysql表的代码: df_name.write.jdbc(url=mysql_url.value, table=tbl_name, mode=mode

我正在编写一个python应用程序,它从Cassandra读取数据,通过Spark api进行一些处理,然后通过jdbc将结果写入Mysql数据库

通过spark处理数据的整个代码只需几秒钟,但将最后一个数据帧(约5000行)写入mysql大约需要10分钟,因此我试图找出如何加快这一部分的速度

这是我用来将py spark dataframe写入mysql表的代码:

df_name.write.jdbc(url=mysql_url.value,
table=tbl_name,
mode=mode.value,
properties={'user': mysql_user.value,
'password': mysql_pwd.value,
'driver': mysql_jdbc.value})
我分配了
--执行器内存4g--驱动程序内存2g--执行器内核总数6
来运行我的应用程序

我想写入mysql的数据帧的分区数是5740;我遵循了几个减少分区数量的建议(通过.repartition()函数),但这并没有加快编写阶段

我还按照[1]中的技巧设置了
rewriteBatchedStatements=true
useServerPrepsMTS=false
,但性能还没有改善

在通过jdbc从dataframe写入mysql时,是否有任何设置或技巧可以提高速度

谢谢你的帮助

[1]


p/S:我们的Mysql数据库正在生产中,我们在任何其他应用程序中都看不到性能问题。

如果5000 reows需要10分钟,则可能是您的数据库配置出现了严重问题,或者(更有可能)问题不是JDBC writer的问题。如何创建
df_name
?我将数据从cassandra读取到数据帧,进行一些过滤,然后将结果存储到
df_name
;一切都进展顺利(只需几秒钟),调用
df_name.write.jdbc时会出现瓶颈,因为这大约需要10分钟。我们的Mysql数据库正在生产中,我们在任何其他应用程序中都没有看到性能问题。一切都进展顺利(只需几秒钟),因为在调用操作之前,一切都是懒惰的。那里什么也没发生。我也是这么想的。最简单的检查方法是将
write.jdbc
替换为
df_name.rdd.foreach(lambda:None)