译者
张鹏(卓昇),阿里云计算平台事业部技术专家。
前言
本文翻译自大数据技术公司 Databricks 针对数据湖 Delta Lake 系列技术文章。众所周知,Databricks 主导着开源大数据社区 Apache Spark、Delta Lake 以及 ML Flow 等众多热门技术,而 Delta Lake 作为数据湖核心存储引擎方案给企业带来诸多的优势。
此外,阿里云和 Apache Spark 及 Delta Lake 的原厂 Databricks 引擎团队合作,推出了基于阿里云的企业版全托管 Spark 产品 —— Databricks 数据洞察,该产品原生集成企业版 Delta Engine 引擎,无需额外配置,提供高性能计算能力。有兴趣的同学可以搜索` Databricks 数据洞察`或`阿里云 Databricks`进入官网,或者直接访问以下链接进行了解:
https://www.aliyun.com/product/bigdata/spark
本系列还包括其他内容,欢迎持续关注:
第一章:基础和性能
第二章:特性
01、【详谈 Delta Lake】系列专题 之 特性 - 01 为什么使用 Delta Lake 的 MERGE 功能?>>
02、(本文)使用 Python API 在 Delta Lake 数据表上操作/大型数据湖的 Time Travel 功能
03、 轻松克隆 Delta Lake / 在 Apache Spark 上的 Delta Lake 中启用 Spark SQL 语句
第三章:Lakehouse
第四章:Streaming
第五章:客户用例
Delta Lake技术系列 - 特性(Features)
——使用 Delta Lake 稳定的特性来可靠的管理您的数据
Chapter-02 使用Python API在Delta Lake数据表上进行简单,可靠的更新和删除操作
在本章中,我们将演示在飞机时刻表的场景中,如何在 Delta Lake 中使用 Python 和新的 Python API。我们将展示如何新增,更新和删除数据,如何使用 time travle 功能来查询旧版本数据,以及如何清理较旧的版本。
Delta Lake使用入门
Delta Lake 软件包可以通过 PySpark 的-- packages 选项来进行安装。在我们的示例中,我们还将演示在 VACUUM 文件和 Apache Spark 中执行 Delta Lake SQL 命令的功能。由于这是一个简短的演示,因此我们还将启用以下配置:
spark.databricks.delta.retentionDurationCheck.enabled=false
允许我们清理文件的时间短于默认的保留时间7天。注意,这仅是对于 SQL 命令 VACUUM 是必需的。
spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension
在 Apache Spark 中启用 Delta Lake SQL 命令;这对于 Python 或 Scala API 调用不是必需的。
# Using Spark Packages
./bin/pyspark --packages io.delta:delta-core_2.11:0.4.0 --conf “spark. databricks.delta.retentionDurationCheck.enabled=false” --conf “spark. sql.extensions=io.delta.sql.DeltaSparkSessionExtension”
Delta Lake数据的加载和保存
这次将使用准时飞行数据或离港延误数据,这些数据是从RITA BTS航班离岗统计中心生成的;这些数据的一些示例包括 2014 Flight Departure Performance via d3.js Crossfilter 和 针对Apache Spark的具有图形化结构的准时飞行数据。在 PySpark 中,首先读取数据集。
# Location variables
tripdelaysFilePath = “/root/data/departuredelays.csv”
pathToEventsTable = “/root/deltalake/departureDelays.delta”
# Read flight delay data
departureDelays = spark.read \
.option(“header”, “true”) \
.option(“inferSchema”, “true”) \
.csv(tripdelaysFilePath)
接下来,我们将离港延迟数据保存到 Delta Lake 表中。在保存的过程中,我们能够利用它的优势功能,包括 ACID 事务,统一批处理,streaming 和 time travel 。
# Save flight delay data into Delta Lake format
departureDelays \
.write \
.format(“delta”) \
.mode(“overwrite”) \
.save(“departureDelays.delta”)
注意,这种方法类似于保存 Parquet 数据的常用方式。现在您将指定格式(“ delta ”)而不是指定格式(“ parquet ”)。如果要查看基础文件系统,您会注意到为 Delta Lake 的离港延迟表创建了四个文件。
/departureDelays.delta$ ls -l
.
..
_delta_log
part-00000-df6f69ea-e6aa-424b-bc0e-f3674c4f1906-c000.snappy.parquet
part-00001-711bcce3-fe9e-466e-a22c-8256f8b54930-c000.snappy.parquet
part-00002-778ba97d-89b8-4942-a495-5f6238830b68-c000.snappy.parquet
Part-00003-1a791c4a-6f11-49a8-8837-8093a3220581-c000.snappy.parquet
现在,让我们重新加载数据,但是这次我们的数据格式将由 Delta