加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Apache Spark Delta Lake写数据行使及实现道理代码理会

发布时间:2019-10-02 16:25:24 所属栏目:教程 来源:明惠
导读:Delta Lake 写数据是其最根基的成果,并且其行使和现有的 Spark 写 Parquet 文件根基同等,在先容 Delta Lake 实现道理之前先来看看怎样行使它,详细行使如下: df.write.format(delta).save(/data/yangping.wyp/delta/test/) //数据凭证dt分区 df.write.f

在 Delta Lake 中,假如是新增文件则会在事宜日记中行使 AddFile 类记录相干的信息,AddFile 耐久化到事宜日记内里的内容如下:

  1. {"add":{"path":"dt=20190801/part-00001-bdff67f3-c70f-4817-898d-15a73c93271a.c000.snappy.parquet","partitionValues":{"dt":"20190801"},"size":429,"modificationTime":1566990855000,"dataChange":true}} 

可以看出 AddFile 内里记录了新增文件的生涯路径,分区信息,新增的文件巨细,修改时刻等信息。假如是删除文件,也会在事宜日记内里记录这个删除操纵,对应的就是行使 RemoveFile 类存储,RemoveFile 耐久化到事宜日记内里的内容如下:

  1. {"remove":{"path":"dt=20190801/part-00001-7f3fe89d-e55b-4848-93ea-4133b5d406d6.c000.snappy.parquet","deletionTimestamp":1566990856332,"dataChange":true}} 

RemoveFile 内里生涯了删除文件的路径,删除时刻等信息。假如新增一个文件,再删除一个文件,那么最新的事宜日记快照内里只会生涯删除这个文件的记录。从这内里也可以看出, Delta Lake 删除、新增 ACID 是针对文件级此外。

上面的写操纵必定会发生新的文件,以是写操纵之后就必要拿到新增的文件(val newFiles = txn.writeFiles(data, Some(options)) )newFiles(AddFile) 和必要删除的文件(RemoveFile)。针对那些文件必要删除必要做一些判定,首要分两种环境(详细拜见 write 要领内里的):

  • 假如是全表包围,则直接从缓存在内存中最新的事宜日记快照中拿出全部 AddFile 文件,然后将其标志为 RemoveFile;
  • 假如是分区内的包围,则从缓存在内存中最新的事宜日记快照中拿出对应分区下的 AddFile 文件,然后将其标志为 RemoveFile。

最后 write 要领返回新增的文件和必要删除的文件(newFiles ++ deletedFiles),这些文件最终必要记录到事宜日记内里去。关于事宜日记是怎样写进去的请拜见这篇文章的具体说明。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读