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 时遇到问题

mysql优化--in或者or选择

我如何将信息插入到 Order-OrderProduct 表 MySQL Laravel

Spark SQL 和 MySQL-SaveMode.Overwrite 不插入修改的数据

Spark SQL 和 MySQL-SaveMode.Overwrite 不插入修改的数据