【发布时间】:2017-07-25 06:12:02
【问题描述】:
我有这个奇怪的错误。我有一个例程,如果数据帧存在(或创建一个数据帧),则读取它,对其进行修改,然后以镶木地板格式再次将其保存在同一目标路径中,并使用“覆盖”模式。
在第一次运行时,当没有数据框时,我创建一个并保存它。它在输出文件夹中生成 4 个文件:
- _SUCCESS.crc
- part-r-<.....>.snappy.parquet.crc
- _成功
- part-r-<.....>.snappy.parquet
然后,在第二次运行中,我读取了数据帧,对其进行了修改,当我尝试覆盖它时,它抛出了一个异常,*part-r-<.....>.snappy.parquet file does not exist*.
异常发生时输出文件夹为空,但在df.write.parquet(path, 'overwrite')执行之前文件夹中包含该文件。
我尝试将 spark.sql.cacheMetadata 设置为“false”,但没有帮助。 spark.catalog.listTables() 返回一个空列表,因此没有必要刷新任何内容。
现在,我只是删除输出文件夹的项目,然后写入数据框。有用。但是为什么原来的“覆盖”模式会失败??
谢谢。
【问题讨论】:
-
问题是当你应用 savemode 作为覆盖然后在创建物理计划 spark 后删除目录你可以尝试 savemode as append
-
我面临同样的问题和保存模式,因为从 spark 写入 s3 时追加也失败
标签: apache-spark pyspark apache-spark-sql