Parquet元数据文件需要回滚吗?

Do Parquet Metadata Files Need to be Rolled-back?

当一个 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

如果在没有 Parquet 实用程序(通过 shell 或文件浏览器等)的情况下删除分区 date=2,是否需要将任何元数据文件回滚到存在时只有分区 date=1?

还是可以随意删除分区,以后重写(或不重写)?

如果您使用的是 DataFrame,则 无需回滚 元数据文件。

例如:

您可以将 DataFrame 写入 S3

df.write.partitionBy("date").parquet("s3n://bucket/folderPath")

然后,使用 S3 浏览器(例如 CloudBerry)手动 删除 您的一个分区(S3 中的 date=1 文件夹)

现在你可以

  • 加载你的数据,看到数据仍然有效 除了你在分区 date= 中的数据1 sqlContext.read.parquet("s3n://bucket/folderPath").count

  • 或使用append模式重写您的DataFrame(或任何其他具有相同模式的DataFrame)

    df2.write.mode("append").partitionBy("date").parquet("s3n://bucket/folderPath")
    

您也可以从 databricks 论坛查看此 question