Parquet元数据文件是否需要回滚?

BAR*_*BAR 13 apache-spark parquet spark-streaming

当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
Run Code Online (Sandbox Code Playgroud)

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

或者可以随意删除分区并在以后重写它们(或不重写)?

Nad*_*dav 4

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

例如:

您可以将 DataFrame 写入 S3

df.write.partitionBy("date").parquet("s3n://bucket/folderPath")
Run Code Online (Sandbox Code Playgroud)

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

现在你可以

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

  • 或者使用追加模式 重写您的 DataFrame(或具有相同架构的任何其他 DataFrame)

    df2.write.mode("append").partitionBy("date").parquet("s3n://bucket/folderPath")
    
    Run Code Online (Sandbox Code Playgroud)

您还可以从 databricks 论坛查看这个问题