Spark - 读取和写入相同的 S3 位置
Spark - Read and Write back to same S3 location
我正在从 S3 位置读取数据集 dataset1 和 dataset2。然后我转换它们并写回到读取 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 的所有转换的信息。
当您从同一位置读取数据并使用覆盖写入时,'write using override' 是 DF 的操作。当 spark 看到 'write using override' 时,在它的执行计划中它首先添加删除路径,然后尝试读取已经空出的路径;因此错误。
可能的解决方法是先写入某个临时位置,然后将其用作源,覆盖 dataset2
位置
我正在从 S3 位置读取数据集 dataset1 和 dataset2。然后我转换它们并写回到读取 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 的所有转换的信息。
当您从同一位置读取数据并使用覆盖写入时,'write using override' 是 DF 的操作。当 spark 看到 'write using override' 时,在它的执行计划中它首先添加删除路径,然后尝试读取已经空出的路径;因此错误。
可能的解决方法是先写入某个临时位置,然后将其用作源,覆盖 dataset2
位置