Dleta Lake ScalaAPI DeltaTable对象的基本操作 删除、更新、融合更新

导包:

import io.delta.tables._
import org.apache.spark.sql.functions._

创建DeltaTable对象

  • 从文件读取
val deltaTable = DeltaTable.forPath("E:\\cache\\sparkCache\\20200420\\delta-table")

注意:以读取文件方式创建的DeltaTable,每次操作都会直接保存到文件!!!

DeltaTable的普通更新

代码:

package demo01

//注意这里的导包,如果直接写代码,在idea里有时候很难找到具体的包,甚至都不显示提示
//所以最好记住它们

import io.delta.tables._
import org.apache.spark.sql.functions._
import org.apache.spark.sql.SparkSession


object Delta04 {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder().appName("Delta04")
      .master("local[*]")
      .getOrCreate()

    val sc = spark.sparkContext
    sc.setLogLevel("WARN")


    //首先创建一个DeltaTable对象
    val deltaTable = DeltaTable.forPath("E:\\cache\\sparkCache\\20200420\\delta-table")

    println("更新前:")
    deltaTable.toDF.show()

    // 把每个偶数都加上100
    deltaTable.update(
      condition = expr("id % 2 == 0"),
      set = Map("id" -> expr("id + 100")))
    //第一个参数condition条件,满足条件才更新,第二个参数是操作

    println("更新后:")
    deltaTable.toDF.show()




  }

}

运行结果:
在这里插入图片描述

DeltaTable的元素删除

代码:

package demo01


import io.delta.tables._
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._

object Delta05 {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder().appName("Delta05")
      .master("local[*]")
      .getOrCreate()

    val sc = spark.sparkContext
    sc.setLogLevel("WARN")

    val deltaTable = DeltaTable.forPath("E:\\cache\\sparkCache\\20200420\\delta-table")

    println("删除前:")
    deltaTable.toDF.show()

    // 删除所有偶数
    deltaTable.delete(condition = expr("id % 2 == 0"))
    //参数condition条件,满足条件的删除

    println("删除后:")
    deltaTable.toDF.show()

  }

}

运行结果:
在这里插入图片描述

DeltaTable的融合更新

package demo01

import io.delta.tables._
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._

object Delta06 {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder().appName("Delta06")
      .master("local[*]")
      .getOrCreate()

    val sc = spark.sparkContext
    sc.setLogLevel("WARN")

    val deltaTable = DeltaTable.forPath("E:\\cache\\sparkCache\\20200420\\delta-table")

    println("融合前:")
    deltaTable.toDF.show()
    // Upsert (merge) new data (融合式更新插入新数据)
    val newData = spark.range(0, 20).toDF

    deltaTable.as("oldData")
      .merge(
        newData.as("newData"),
        "oldData.id = newData.id")
      .whenMatched
      .update(Map("id" -> col("newData.id")))
      .whenNotMatched
      .insert(Map("id" -> col("newData.id")))
      .execute()

    //merge是融合两个DeltaTable,第一个参数是要融合的DeltaTable,第二个参数是融合条件
    //whenMatched是满足后执行某种操作,这里执行更新操作
    //whenNotMatched是不满足时执行某种操作,这里执行插入操作
    //execute是执行的意思,没有它相当于定义了操作而没有执行。
    //这段话的意思是,如果旧Table里有和新Table里id相同的元素,就把旧Table里的元素替换为id相同的新Table里的元素
    //如果旧Table里没有发现新Table里元素的这个id,就把新Table里的元素插入到旧Table里
    //这段操作执行完之后,这个deltaTable就融合完了。

    println("融合后:")
    deltaTable.toDF.show()
    //融合完输出看一下
  }

}

运行结果:这个可能因为是数字的缘故,结果不太直观,你可以用其他数据试一下,直观感受一下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值