【问题标题】:Do Parquet Metadata Files Need to be Rolled-back?Parquet 元数据文件是否需要回滚?
【发布时间】:2016-01-01 09:56:04
【问题描述】:
当 Parquet 文件 data 在其 date 列上写入分区时,我们会得到如下目录结构:
/data
_common_metadata
_metadata
_SUCCESS
/date=1
part-r-xxx.gzip
part-r-xxx.gzip
/date=2
part-r-xxx.gzip
part-r-xxx.gzip
如果分区 date=2 在没有 Parquet 实用程序参与的情况下被删除(通过 shell 或文件浏览器等),是否需要回滚任何元数据文件到只有分区 date=1 时?
还是可以随意删除分区,以后再重写(或不重写)?
【问题讨论】:
标签:
apache-spark
spark-streaming
parquet
【解决方案1】:
如果您使用 DataFrame,则无需回滚元数据文件。
例如:
您可以将 DataFrame 写入 S3
df.write.partitionBy("date").parquet("s3n://bucket/folderPath")
然后,使用 S3 浏览器(例如 CloudBerry)手动删除您的一个分区(S3 中的 date=1 文件夹)
现在可以
-
加载您的数据并查看数据是否仍然有效,除了您在 partition date=1 sqlContext.read.parquet("s3n://bucket/folderPath").count
中的数据李>
-
或使用追加模式重写您的DataFrame(或具有相同架构的任何其他DataFrame)
df2.write.mode("append").partitionBy("date").parquet("s3n://bucket/folderPath")
您还可以查看来自 databricks 论坛的 question。