在databricks中创建parquet文件后无法在dbfs中找到文件

问题描述 投票:0回答:1

我创建了一个镶木地板文件,并且此代码已成功执行。但是,在同一路径“/mnt/dev/lvl1/lvl2/”中,存在子文件夹lvl2_1和lvl2_2,其中包含“delta”文件。尝试访问这些表时,出现错误“AnalysisException:增量表“/mnt/dev/lvl1/lvl2/lvl2_1”不存在。 使用

dbutils.fs.ls("/mnt/dev/lvl1/lvl2/lvl2_1")
检查文件会显示 3 个文件,即。 _成功,_delta_log,已承诺。 我已经检查过路径并多次访问过该表,但现在由于上述错误,我无法访问该增量文件。 已执行的与此文件夹相关的唯一操作是创建镶木地板文件。我不确定是什么导致了错误。 如果您能提供有关识别问题的信息,我将不胜感激,以免重复。如果需要任何其他信息,请告诉我。

我使用以下命令创建了一个镶木地板文件:

output_path = "/mnt/dev/lvl1/lvl2/"
df\
.write\
.mode("overwrite")\
.format("parquet")\
.save(output_path)

这段代码执行成功。 但是,在路径“/mnt/dev/lvl1/lvl2/”中,有子文件夹lvl2_1和lvl2_2,其中包含“delta”文件。尝试访问这些表时,出现错误“AnalysisException:增量表“/mnt/dev/lvl1/lvl2/lvl2_1”不存在。 使用

dbutils.fs.ls("/mnt/dev/lvl1/lvl2/lvl2_1")
检查文件会显示 3 个文件,即。 _成功,_delta_log,已承诺。 我已经检查过路径并多次访问过该表,但现在由于上述错误,我无法访问该增量文件。 已执行的与此文件夹相关的唯一操作是创建镶木地板文件。 我的期望是将镶木地板文件保存在输出路径中,而不删除/损坏其他任何内容。

databricks azure-databricks parquet delta-lake
1个回答
0
投票

这是因为

lvl2_1
里面存在的文件被删除了,删除是因为在
parquet
模式下写入
Overwrite
文件而触发的。即使您有一个
_delta_log
文件,它仍然会给您一个错误。

每当您尝试向

parquet
写入数据时,您需要指定一个空目录路径,或者应给出
Overwrite
选项。

在您的情况下,由于您要覆盖文件,所有底层镶木地板文件都已被删除。如果您在增量表中看到已提交的文件,则表明文件已删除。

enter image description here

我的建议是将数据以 parquet 和 delta 格式保存在不同的目录中,而不是像

lvl2_par
那样保存在单个目录中。

output_path = "/mnt/dev/lvl1/lvl2/lvl2_par/"
df\
.write\
.mode("overwrite")\
.format("parquet")\
.save(output_path)

这永远不会给您带来错误或在 parquet 和 delta 之间产生冲突,除非您提供具有覆盖选项的父目录。

© www.soinside.com 2019 - 2024. All rights reserved.