Apache Spark 发布了 Delta Lake 0.4.0,主要支持 DML 的 Python API、将 Parquet 表转换成 Delta Lake 表 以及部分 SQL 功能。 

下面详细地介绍这些功能

部分功能的 SQL 支持

SQL 的支持能够为用户提供极大的便利,如果大家去看数砖的 Delta Lake 产品,你肯定已经看到它已经支持了 SQL 语法。但是开源的 Delta Lake 在这个版本之前只支持使用 Scala\Java 去创建、删除、更新 Delta Lake 表。

值得高兴的是,从 0.4.0 版本开始,Delta Lake 已经开始支持一些命令的 SQL 语法了。由于 Delta Lake 是单独的一个项目,如果需要让它支持所有的 SQL 语法,需要从 Apache Spark 里面拷贝大量的代码到 Delta Lake 项目中,不便于维护,所以这个版本只支持 vacuum 和 history 简单命令的 SQL 语法。

其他的 delete、update 以及 merge 的 DML 操作支持可能得等到 Spark 3.0 版本才会支持的。目前社区也在 Spark 3.0 里面的 DataSource V2 API 里面添加了对 DELETE/UPDATE/MERGE 的支持,详情参见 https://issues.apache.org/jira/browse/SPARK-28303。相信在未来版本,这些基本的 SQL 语法支持也会逐渐支持。

用于 DML 和实用操作的 Python API

在 0.4.0 版本之前,Delta Lake 只支持 Scala 和 Java API。为了能够在 Python 中使用 Delta Lake,这个版本引入了 Python API(具体可以参见 https://github.com/delta-io/delta/issues/89),可以用它在 Delta Lake 表来进行 update\delete\merge 等操作。

我们还可以使用这个 Python API 运行一些实用操作,比如 vacuum、history等。这样 Python 和 Scala\Java 的 API 功能就对齐了。更多关于 Python API 的使用可以参见 Delta Lake 的官方文档。

将 Parquet 表转换成 Delta Lake 表

如果我们有一张 parquet 的普通表,然后我们想把它转换成  Delta Lake 表,在这之前我们需要先读出这张表,然后再写成 Delta Lake 表。如果我们的 parquet 表非常大,这需要很多的资源去转换。这个版本为我们提供了转换命令,直接可以在原地将 Parquet 表转换成 Delta Lake 表,注意这里说的是原地,意味着不需要将数据从一个地方挪到另外一个地方,也不需要将所有数据读出再写到原目录这个命令会列出 Parquet 表的所有文件,然后通过自动读取所有 Parquet 文件的 footer 位置获取表的模式,最后生成一个 transaction log 来追踪这些文件。然,如果你不需要 Delta Lake 表,你也可以使用这个命令将它再转回成普通的 Parquet 表。


©著作权归作者所有:来自51CTO博客作者mob604756e9d3bc的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. PyCharm2021最新激活教程激活码(PyCharm 2020.3最新版本实测有效)
  2. Presto on Spark:扩展 Presto 以支持大规模 ETL
  3. Redis 6.0 稳定版发布,支持多线程 IO
  4. M 365 开发篇:SharePoint Framework 1.12将扩展更多的Teams
  5. Docker安装及配置优化(3)
  6. 最新 M1 版 MacBook 买前必知
  7. 【修订版】一文看懂Kafka消息格式的演变
  8. Apache Hadoop 3.1.0 正式发布,原生支持GPU和FPGA
  9. springcloud alibaba 阿里组件版本关系

随机推荐

  1. Python爬取近十年TIOBE编程语言热度数据
  2. 回家种完地,我回来了。
  3. 如何用python进行数据分析——00环境配置
  4. 我用python帮朋友做了张图,结果
  5. 2020年入门数据分析选择Python还是SQL?七
  6. 老大手把手教我玩 Git 变基!
  7. 项目版本上线,小鹿获得最佳 Bug 奖!
  8. 附实战代码|告别OS模块,体验Python文件操作
  9. 没用过这几招,别说你会使用Jupyter Notebo
  10. 再见,Matplotlib!