spark 插入数据到mysql时遇到的问题 org.apache.spark.SparkException: Task not serializable
Posted lq0310
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spark 插入数据到mysql时遇到的问题 org.apache.spark.SparkException: Task not serializable相关的知识,希望对你有一定的参考价值。
报错问题:
Exception in thread "main" org.apache.spark.SparkException: Task not serializable
Caused by: java.io.NotSerializableException: org.apache.commons.dbcp2.PoolingDataSource$PoolGuardConnectionWrapper
出错的代码:
def saveMonthTomysql(everymonth_avg:RDD[(String, Float, String)])={ DBs.setup() DB.localTx(implicit session =>{ everymonth_avg.foreach(r=>{ SQL("insert into price_month(name, avgprice, uploaddate) values(?,?,?)") .bind(r._1,r._2,r._3) .update() .apply() }) } ) }
猜测原因可能是传入RDD了
解决方法:
新建一个scala class saveMonthToMysql放到里面并且将传入的参数改成
(String, Float, String)
而不是
RDD[(String, Float, String)])
object Save { DBs.setup() def saveMonthToMysql(everymonth_avg:(String, Float, String))={ DB.localTx(implicit session =>{ SQL("insert into price_month_copy1(name, avgprice, uploaddate) values(?,?,?)") .bind(everymonth_avg._1,everymonth_avg._2,everymonth_avg._3) .update() .apply() } ) } }
使用的时候用rdd调用就可以
everymonth_avg.foreach(x=>{ Save.saveMonthToMysql(x) })
以上是关于spark 插入数据到mysql时遇到的问题 org.apache.spark.SparkException: Task not serializable的主要内容,如果未能解决你的问题,请参考以下文章
将 jQuery datepicker 插入 MySQL 时遇到问题
从 iOS 获取我的 JSON 以发布到我的 php 文件并插入到 mySQL 时遇到问题
我如何将信息插入到 Order-OrderProduct 表 MySQL Laravel