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

时间:2015-10-04 18:24:33

标签: apache-spark spark-streaming parquet

当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,那么当只有分区{{1}时,需要回滚任何元数据文件}}?

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

1 个答案:

答案 0 :(得分:4)

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

例如:

您可以将数据框编写为S3

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

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

现在你可以

  • 加载您的数据并查看数据仍然有效,但分区日期= 1 sqlContext.read.parquet("s3n://bucket/folderPath").count

    时的数据除外
  • 或使用附加模式重写您的DataFrame(或具有相同架构的任何其他DataFrame)

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

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