Spark源码解读(1)--Spark Sql使用JDBC写Write流程

  • 第一步: RDD调用write save() 保存数据到数据库;
//保存数据
    dataFrame.write.format("jdbc")
      .mode(saveMode)
      .option("dbtable",dbtable)
      .option("url",ads_url)
      .option("user",ads_user)
      .option("password",ads_password)
      .save()
  • 第二步: 进入save()方法,通过lookupDataSource判断数据源类型,调用不同方法,
def save(): Unit = {
   
   
    if (source.toLowerCase(Locale.ROOT) == DDLUtils.HIVE_PROVIDER) {
   
   
      throw new AnalysisException("Hive data source can only be used with tables, you can not " +
        "write files of Hive data source directly.")
    }

    assertNotBucketed("save")
    
    //Given a provider name, look up the data source class definition
    val cls = DataSource.lookupDataSource(source, df.sparkSession.sessionState.conf)
    
    if (classOf[DataSourceV2].isAssignableFrom(cls)) {
   
   
      val source = cls.newInstance().asInstanceOf[DataSourceV2]
      source match {
   
   
        case ws: WriteSupport =>
          val sessionOptions = DataSourceV2Utils.extractSessionConfigs(
            source,
            df.sparkSession.sessionState.conf)
          val options = sessionOptions ++ extraOptions

          val writer = ws.createWriter(
            UUID.randomUUID.toString, df.logicalPlan.output.toStructType, mode,
            new DataSourceOptions(options.asJava))

          if 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值