尝试删除Parquet文件并将其替换为从原始文件创建的 Dataframe 时Azure Synapse中的FileNotFoundException

vlurs2pr  于 2022-09-21  发布在  Spark
关注(0)|答案(1)|浏览(156)

我正在尝试删除现有的拼图文件,并将其替换为数据框中的数据,该数据框在删除之前读取原始拼图文件中的数据。这是在Azure Synapse中使用的PySpark。

因此,我从一个 Dataframe 创建了Parquet文件,并将其放在路径中:

full_file_path

我正在试着更新这个Parquet地板文件。根据我所阅读的内容,您不能编辑拼图文件,因此作为一种解决办法,我将该文件读取到新的 Dataframe 中:

df = spark.read.parquet(full_file_path)

然后,我使用更新创建一个新的 Dataframe :

df.createOrReplaceTempView("temp_table")
df_variance = spark.sql("""SELECT * FROM temp_table WHERE ....""")

并创建DF_VARIANCE Dataframe 。

然后,我使用以下命令删除原始文件:

mssparkutils.fs.rm(full_file_path, True)

并删除原始文件。但是,当我对df_varance Dataframe 执行任何操作时,比如df_varance.count(),我得到一个FileNotFoundException错误。我真正想做的是:

df_variance.write.parquet(full_file_path)

这也是一个FileNotFoundException错误。但我发现,我尝试对df_VARIANCE Dataframe 执行的任何操作都会产生此错误。因此,我认为这可能与以下事实有关:原始的FULL_FILE_PATH已被删除,而DF_VARIANCE Dataframe 维护了对(现已删除的)文件路径的某种引用,或类似的内容。请帮帮忙。谢谢。

xlpyo6sf

xlpyo6sf1#

Spark Dataframe 不是行的集合。Spark Dataframe 使用“延迟执行”。只有当你打电话给

df_variance.write

是从源读取、执行转换并写入目标的Spark作业运行。

Spark DataFrame实际上只是一个查询,在最终运行它之前,您可以用其他表达式组合它。

你可能想要从 parquet 转移到三角洲。https://learn.microsoft.com/en-us/azure/synapse-analytics/spark/apache-spark-what-is-delta-lake

相关问题