尝试将数据帧保存为镶木地板格式时的文件未发现异常,具有'overwrite'模式



我有这个怪异的错误。我有一个例程,如果存在(或者否则创建),则读取数据框,然后将其修改,然后以"覆盖"模式以parquet格式以同一目标路径保存。

在第一次运行中,当没有数据框架时,我会创建一个并保存它。它在输出文件夹4文件中生成:

  • _success.crc
  • part-r-< .....>。snappy.parquet.crc
  • _success
  • part-r-< .....>。snappy.parquet

然后,在第二次运行中,我读取数据框,修改它,当我尝试覆盖它时,会引发*part-r-<.....>.snappy.parquet file does not exist*的例外。

发生异常时,输出文件夹为空,但是在执行df.write.parquet(path, 'overwrite')之前,文件夹包含此文件。

我试图将spark.sql.cachemetadata设置为" false",但这无济于事。spark.catalog.listtables()返回一个空列表,因此没有意义可以刷新任何东西。

目前,我只需删除输出文件夹的项目,然后编写数据框。有用。但是,为什么使用"覆盖"模式的原始方法失败了?

谢谢。

rdd不像变量那样持有数据诉讼称为。

所以你在这里做的是

1st time => ... =>保存到路径a
第二次开始=> 从路径A =>读取一些转换=> 保存到路径A具有覆盖模式

现在注意,您的实际操作是保存到路径。UTIL您称之为操作,Spark只会创建DAG,该DAG知道何时将呼唤一个动作以查找数据(保存到路径A),如何转换它们以及在哪里保存/显示。

但是,当您选择模式覆盖时,在执行计划中添加以首先删除路径,然后尝试读取已经空置的路径。

因此,作为解决方法,您可以保存它们的不同文件夹,例如分区基础,也可以将它们保存在两个路径一个目标和一个TMP中。

在这里要做的另一件事是缓存它 -

df.cache()

从HDFS阅读后。

相关内容

  • 没有找到相关文章

最新更新