mysql overwrite数据,sparkSQL 写数据到MySQL的几种模式解释以及overwrite模式在不删除表结构的情况下的实现...

1、数据存入Mysql 几种模式

默认为SaveMode.ErrorIfExists模式,该模式下,若数据库中已经存在该表,则会直接报异常,导致数据不能存入数据库;

SaveMode.Append 若表已经存在,则追加在该表中;若该表不存在,则会先创建表,再插入数据;

SaveMode.Overwrite 重写模式,其本质是先将已有的表及其数据全都删除,再重新创建该表,然后插入新的数据;

SaveMode.Ignore 若表不存在,则创建表,并存入数据;若表存在的情况下,直接跳过数据的存储,不会报错。

2、SaveMode.Overwrite模式在不删除已有的表的情况下即保留表结构的情况下,覆盖原有数据的实现

eg:

import java.sql.DriverManager

import java.util.Properties

import org.apache.spark.sql.{SaveMode, SparkSession}

object OverWrite {

def main(args: Array[String]): Unit = {

val ss = SparkSession

.builder()

.appName("OverWrite")

.master("local")

//.config("spark.sql.warehouse.dir", "file:///D://lenovo_pj//cpp//cpp")

.getOrCreate()

val url = "jdbc:mysql://10.96.91.186:3306/lenovo_channel_persona?rewriteBatchedStatements=true&" +

"useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull"

val driver = "com.mysql.jdbc.Driver"

val user = "root"

val password = "123456"

val prop = new Properties

prop.setProperty("user",user)

prop.setProperty("password",password)

prop.setProperty("driver",driver)

prop.setProperty("charset","UTF-8")

val arr = Array("aa","bb","cc")

val tableName = "test_overwrite"

//先清空MySQL表

Class.forName(driver)

val conn = DriverManager.getConnection(url,prop)

val sm = conn.prepareCall("truncate table "+tableName)

sm.execute()

sm.close()

//在往MySQL表追加数据

import ss.sqlContext.implicits._

ss.sparkContext

.parallelize(arr)

.toDF("node1","node2","node3")

.write

.mode(SaveMode.Append)

.jdbc(url,tableName,prop)

conn.close()

ss.stop()

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SparkSQL数据库的四种模式包括: 1. Append模式:将新数据追加到现有表的末尾。 2. Overwrite模式:用新数据完全覆盖现有表。 3. Ignore模式:如果表已经存在,则忽略新数据。 4. ErrorIfExists模式:如果表已经存在,则抛出错误。 Schema与MySQL类型的对应关系如下: 1. StringType -> VARCHAR 2. IntegerType -> INT 3. LongType -> BIGINT 4. DoubleType -> DOUBLE 5. FloatType -> FLOAT 6. DecimalType -> DECIMAL 7. BooleanType -> BOOLEAN 8. TimestampType -> TIMESTAMP 9. DateType -> DATE 10. BinaryType -> BLOB 11. ArrayType -> JSON 12. StructType -> JSON 注意:以上仅为一般情况下的对应关系,具体应根据实际情况进行调整。 ### 回答2: SparkSQL是Apache Spark生态系统中的一个模块,它提供了一种将结构数据储存在分布式存储系统中并进行高效处理的方式。SparkSQL数据抽象为数据帧,也就是DataFrame,它具有明确的列和行标签,类似于传统关系型数据库中的表。 当我们读取了数据帧后,我们可以对它进行数据清洗、转换和分析等操作,然后将结果数据库中。在这个过程中,SparkSQL提供了四种模式,分别是: 1. ErrorIfExists(默认模式): 如果目标表已经存在,则直接抛出异常,不会执行入操作。这是避免重复入和数据库表结构发生不一致的最安全方式。 2. Ignore:如果目标表已经存在,则忽略入操作,不会引发任何异常或错误。 3. Overwrite:如果目标表已经存在,则覆盖该表中的所有数据,并替换它们为新入的数据。 4. Append:如果目标表已经存在,则在该表的末尾插入新的数据。 在将SparkSQL数据数据库时,我们需要了解Schema与MySQL类型之间的对应关系,以便正确建立数据库表和其列的类型。下表展示了常见的数据类型和SparkSQLMySQL中的类型对应关系: |SparkSQL数据类型|MySQL数据类型| |---------|---------| |ByteType|TINYINT| |ShortType|SMALLINT| |IntegerType|INT| |LongType|BIGINT| |FloatType|FLOAT| |DoubleType|DOUBLE| |DecimalType|DECIMAL| |StringType|VARCHAR| |BinaryType|BLOB| |BooleanType|BOOLEAN| |TimestampType|DATETIME| |DateType|DATE| 综上所述,SparkSQL提供了四种模式:ErrorIfExists,Ignore,Overwrite和Append;同时,在将数据MySQL前,需要知道SparkSQL数据类型与MySQL数据类型的对应关系,以便正确地映射数据库表的列类型。 ### 回答3: SparkSQL数据库时有四种不同的模式,分别是Overwrite、Append、Ignore和ErrorIfExists。每种模式都有不同的行为和应用场景。 Overwrite模式,即覆盖模式,会先清空表中的所有数据,然后再把新的数据入表中。这种模式适用于要重建整个表的情况。 Append模式,即追加模式,会在表的末尾追加新的数据。这种模式适用于只想添加一些新的数据,而不想删除原来的数据。 Ignore模式,即忽略模式,会跳过数据中已经存在于表中的数据,只把新数据入表中。这种模式适用于不想让数据出现冗余情况情况。 ErrorIfExists模式,即错误存在模式,当表已经存在时,如果再尝试数据就会抛出异常。这种模式适用于不想让同名表重复创建的情况。 在SparkSQL中,使用的数据类型与MySQL数据类型是非常类似的。例如,SparkSQL的String类型对应MySQL的VARCHAR类型;SparkSQL的Integer类型对应MySQL的INT类型;SparkSQL的Double类型对应MySQL的DOUBLE类型等等。这些类型对应的值范围、存储大小等都相似或一致,因此在使用SparkSQLMySQL进行数据交互时,可以较为方便地进行类型匹配和转换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值