【问题标题】:Parquet schema managementParquet 模式管理
【发布时间】:2019-03-24 09:45:27
【问题描述】:
我最近开始了一个新项目,我们使用 Spark 以 Parquet 格式写入/读取数据。该项目正在迅速变化,我们确实需要定期更改 parquet 文件的架构。我目前正在努力处理版本控制数据和代码。
我们对代码库使用版本控制系统,但很难(至少在我看来)为数据本身做这件事。我也有迁移脚本,我用它来将数据从旧模式迁移到新模式,但是在运行迁移之前,我丢失了关于 parquet 文件模式的信息。了解原始模式也是我的首要任务。
所以我的问题是
- 如何跟踪 HDFS 中架构不一致的 parquet 文件?我有几 TB 的 parquet 文件。
- 运行迁移脚本将当前架构(原始)转换为新架构后,您如何跟踪原始架构?
- 是否有任何现有的工具可以实现这一点,或者我必须自己编写一些东西?
【问题讨论】:
标签:
hadoop
version-control
parquet
data-migration
【解决方案1】:
您可以使用delta lake ,它具有覆盖架构和维护以前的功能
数据版本
delta Lake 基本上是一堆带有 delta 日志(提交日志)的 parquet 文件
data.write.format("parquet").mode("overwrite").save("/tmp/delta-table")
上面的代码sn-p覆盖了普通的parquet文件,这意味着之前的数据将被覆盖
data.write.format("delta").mode("overwrite").save("/tmp/delta-table")
上面是delta湖覆盖它去检查delta日志并将delta湖中的新数据版本覆盖为带有时间戳的版本1(如果以前的数据是版本零)
我们还可以在三角湖中进行时间旅行(读取以前版本的数据)
df = spark.read.format("delta").option("versionAsOf", 0).load("/tmp/delta-table")
此代码可用于读取数据的第零版本