Spark - 读取和写回相同的 S3 位置



我正在从 S3 位置读取数据集 1 和数据集 2。然后,我转换它们并写回从中读取 dataset2 的同一位置。

但是,我收到以下错误消息:

An error occurred while calling o118.save. No such file or directory 's3://<myPrefix>/part-00001-a123a120-7d11-581a-b9df-bc53076d57894-c000.snappy.parquet

如果我尝试写入新的 S3 位置,例如s3://dataset_new_path.../,那么代码工作正常。

my_df 
.write.mode('overwrite') 
.format('parquet') 
.save(s3_target_location)

注意:我在数据帧中读取后尝试使用.cache(),但仍然收到相同的错误。

这导致问题的原因是您正在读取和写入您尝试覆盖的相同路径。这是标准的Spark问题,与AWS Glue无关。

Spark 在 DF 上使用延迟转换,并在调用某些操作时触发。它创建 DAG 以保留有关应应用于 DF 的所有转换的信息。

当您从同一位置读取数据并使用覆盖写入时,"使用覆盖写入"是 DF 的操作。当 Spark 看到"使用覆盖写入"时,在其执行计划中,它会首先添加删除路径,然后尝试读取已经空置的路径;因此错误。

可能的解决方法是先写入某个临时位置,然后将其用作源,覆盖dataset2位置

最新更新