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