spark 插入数据到mysql时遇到的问题 org.apache.spark.SparkException: Task not serializable

报错问题:Exception in thread "main" org.apache.spark.SparkException: Task not serializableCaused 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)
    })

 

原文地址:https://www.cnblogs.com/lq0310/p/10880691.html

时间: 2024-08-25 10:43:42

spark 插入数据到mysql时遇到的问题 org.apache.spark.SparkException: Task not serializable的相关文章

java插入数据至mysql数据库报错:check the manual that coresponds to your mysql server version for the right syntax to use near 'condition)values...解决方案

MySQL5.X(本地数据库) 使用java向表中插入数据时,每次数据库更新,pstm.executeUpdate();就会跳到IO报错,提示原因是sql语法有问题,如题可见 当测试插入数据不含condition字段时,插入成功,尝试更名为conDition时,仍报错 解决方案: 更改condition为conDi,原因可能时因为condition为数据库或java关键字不能使用,更名后不再受影响,插入成功. java插入数据至mysql数据库报错:check the manual that c

SQL多个主键的表,插入数据有重复时,查询数据的重复值?

SQL多个主键的表,插入数据有重复时,会提示违反主键约束不能插入的错误.那么,如何找到插入数据的重复值? 解决方法:使用group by 假设有个表#a,有saleid,vendorid,comid,price,saleprice,quantity等字段. 主键是:saleid,vendorid,comid三个.假设插入#a的数据源可能会有重复的. 即:saleid,vendorid,comid三个字段都一样的字段,那么插入#a的时候会报主键冲突,违反主键约束. 如果想找出#a表中插入重复的值可

【原创】问题定位分享(16)spark写数据到hive外部表报错ClassCastException: org.apache.hadoop.hive.hbase.HiveHBaseTableOutputFormat cannot be cast to org.apache.hadoop.hive.ql.io.HiveOutputFormat

spark 2.1.1 spark在写数据到hive外部表(底层数据在hbase中)时会报错 Caused by: java.lang.ClassCastException: org.apache.hadoop.hive.hbase.HiveHBaseTableOutputFormat cannot be cast to org.apache.hadoop.hive.ql.io.HiveOutputFormat at org.apache.spark.sql.hive.SparkHiveWrit

spark 写入 redis 和 org.apache.spark.SparkException: Task not serializable

spark将数据写入redis时调用以下代码会报  org.apache.spark.SparkException: Task not serializable import com.redis.RedisClient val r = new RedisClient("192.168.1.101", 6379) val perhit = rdd.map(x => { val arr = x.split(" ") val k = arr(0).toInt val

spark关于join后有重复列的问题(org.apache.spark.sql.AnalysisException: Reference '*' is ambiguous)

问题 datafrme提供了强大的JOIN操作,但是在操作的时候,经常发现会碰到重复列的问题.在你不注意的时候,去用相关列做其他操作的时候,就会出现问题! 假如这两个字段同时存在,那么就会报错,如下:org.apache.spark.sql.AnalysisException: Reference 'key2' is ambiguous 实例 1.创建两个df演示实例 val df = sc.parallelize(Array( ("yuwen", "zhangsan&quo

spark出现task不能序列化错误的解决方法 org.apache.spark.SparkException: Task not serializable

import org.elasticsearch.cluster.routing.Murmur3HashFunction; import org.elasticsearch.common.math.MathUtils; // 自定义Partitioner class ESShardPartitioner(settings: String) extends org.apache.spark.Partitioner { protected var _numPartitions = -1; prote

Python使用pyMysql模块插入数据到mysql的乱码解决

1.初步安装mysql,插入中文字符,出现的???的形式 终端提示: pymysql.err.InternalError: (1366, "Incorrect string value: '\\xE4\\xBD\\xA0\\xE5\\xA5\\xBD' for 2.参考博文: https://www.cnblogs.com/houqi/p/5713176.html https://www.cnblogs.com/zknublx/p/5953052.html 3.进入mysql终端查看 show

在代码中,插入数据到数据库时,如果不使用事务,将会导致速度极慢

今天测试,150条数据,调用jdbcTemplate.batchUpdate语句时,未开启事务的情况下,6m左右才能执行完,开启事务后,几百毫秒即可执行完,差距是非常大的. 因为是在一个线程池中执行的,所以任务是new出来的,不能作为bean来处理,所以不能使用注入事务的方式,只能手动调用事务管理器. 首先,从bean中获取事务管理器bean ApplicationContext().getBean(DataSourceTransactionManager.class); 其次,new一个事务定

sqlalchemy插入数据到mysql异常

1. 插入中文报错: 在数据库名称后面添加?charset=utf8 engine = create_engine("mysql+pymysql://root:[email protected]/data?charset=utf8", echo=True) 2. 正常插入,但是提示以下警告: 2018-06-06 16:28:39,789 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode' 2018-06-