用Spark写入Mysql的特别注意事项

相信有部分刚入门的小伙伴对于spark写入Mysql的过程不太熟悉。特意写一篇文章讲一下这个注意事项,以免“上大当”

我们先看一个小伙伴写的一段spark写入mysql的代码


    public static void trans(SparkSession spark,
                             String pro_table, String pro_url, String pro_driver, String pro_user, String pro_password,
                             String dev_table, String dev_url, String dev_driver, String dev_user, String dev_password){
        //根据连接得到mysql数据
        Dataset<Row> data = spark.read()
                .jdbc(pro_url, pro_table, properties(pro_driver,pro_user,pro_password));

        //显示部分mysql的数据
        data.show();
        data.write().format("jdbc")
                .mode(SaveMode.Overwrite)
                .option("url", dev_url)
                .option("dbtable",dev_table)
                .option("user", dev_user)
                .option("password", dev_password)
                .option("driver",dev_driver)
                .save();
    }

由上我们可以发现,他选了一个Overwrite模式,这个模式有啥效果呢?我们可以继续往下看

在这里插入图片描述saveMode一共有四种可选模式,其中有一个叫Overwrite模式,这个模式我们去找一段关于他执行过程的一段源码来分析(重点来了)
如下图
在这里插入图片描述
我们可以看到,如果你在save过程中填入了truncate参数,且原表支持truncate,那么他就会先把表给清空,然后再直接保存。但是(敲重点!!!),要是没有填入truncate参数或者原表不支持truncate,那么它就会把表删除掉,然后按照它所读取到的结构重新生成表,最后保存数据,这样的操作主要会造成原表的结构会丢失,例如,主键自增,原表的字段的描述,字段的索引等。所以用Overwrite模式时一定要慎重。


好了重点介绍完了,我们也可以看看其他模式的执行过程(贴上源码自行理解=,=)
在这里插入图片描述


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值