当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}时,需要回滚任何元数据文件}}?
或者可以随意删除分区并在以后重写(或不重写)?
答案 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。