覆盖镶木地板时发生IOException

时间:2019-11-26 11:03:52

标签: scala apache-spark

我有一个镶木地板文件,假设文件名为abc / A.parquet,并且根据特定条件过滤掉了一些记录并创建了DF,我正在尝试使用saveMode overwrite选项覆盖生成的已过滤DF的文件,但是抛出以下异常: / p>

命令用于覆盖 filterDF.coalesce(1).write.mode(“ overwrite”)。parquet(“ file:/ home / psub2 / cls_parquet2 / file:/home/psub7/abc/A.parquet”)

在写入行时失败。         在org.apache.spark.sql.execution.datasources.FileFormatWriter $ .org $ apache $ spark $ sql $ execution $ datasources $ FileFormatWriter $$ executeTask(FileFormatWriter.scala:285)         在org.apache.spark.sql.execution.datasources.FileFormatWriter $$ anonfun $ write $ 1.apply(FileFormatWriter.scala:197)         在org.apache.spark.sql.execution.datasources.FileFormatWriter $$ anonfun $ write $ 1.apply(FileFormatWriter.scala:196)         在org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)         在org.apache.spark.scheduler.Task.run(Task.scala:109)         在org.apache.spark.executor.Executor $ TaskRunner.run(Executor.scala:381)         在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)         在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624)         在java.lang.Thread.run(Thread.java:748) 引起原因:java.io.FileNotFoundException:文件文件:/home/psub7/abc/A.parquet不存在 基础文件可能已更新。您可以通过在SQL中运行“ REFRESH TABLE tableName”命令或通过重新创建所涉及的Dataset / DataFrame来显式使Spark中的缓存无效。

请帮助,在此先感谢

1 个答案:

答案 0 :(得分:0)

从概念上讲,您不能从同一文件读取和写入数据帧。当您尝试从文件A读取df并尝试将同一df写入同一文件A时,抛出IOException。仅当您未从文件A读取数据帧时,才可以覆盖Parquet文件。 例如,您可以从文件A读取数据帧并覆盖文件B。