我创建了一个镶木地板文件,并且此代码已成功执行。但是,在同一路径“/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,已承诺。
我已经检查过路径并多次访问过该表,但现在由于上述错误,我无法访问该增量文件。
已执行的与此文件夹相关的唯一操作是创建镶木地板文件。
我的期望是将镶木地板文件保存在输出路径中,而不删除/损坏其他任何内容。
这是因为
lvl2_1
里面存在的文件被删除了,删除是因为在parquet
模式下写入Overwrite
文件而触发的。即使您有一个 _delta_log
文件,它仍然会给您一个错误。
每当您尝试向
parquet
写入数据时,您需要指定一个空目录路径,或者应给出 Overwrite
选项。
在您的情况下,由于您要覆盖文件,所有底层镶木地板文件都已被删除。如果您在增量表中看到已提交的文件,则表明文件已删除。
我的建议是将数据以 parquet 和 delta 格式保存在不同的目录中,而不是像
lvl2_par
那样保存在单个目录中。
output_path = "/mnt/dev/lvl1/lvl2/lvl2_par/"
df\
.write\
.mode("overwrite")\
.format("parquet")\
.save(output_path)
这永远不会给您带来错误或在 parquet 和 delta 之间产生冲突,除非您提供具有覆盖选项的父目录。