Spark - чтение и запись в том же месте S3 - PullRequest
0 голосов
/ 13 октября 2019

Я читаю набор данных набор данных1 и набор данных2 из местоположений S3. Затем я преобразовываю их и записываю обратно в то же место, откуда был считан набор данных 2.

Однако я получаю сообщение об ошибке ниже:

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() после чтения в кадре данных, но все еще получаю ту же ошибку.

1 Ответ

1 голос
/ 14 октября 2019

Причина, по которой возникает проблема, заключается в том, что вы читаете и пишете по тому же пути, который пытаетесь перезаписать. Это стандартная проблема Spark и не имеет ничего общего с AWS Glue.

Spark использует ленивое преобразование в DF и запускается при вызове определенного действия. Он создает DAG для хранения информации обо всех преобразованиях, которые должны быть применены к DF.

Когда вы читаете данные из того же места и пишете с использованием переопределения, «запись с использованием переопределения» является действием для DF. Когда spark видит «write using override», в своем плане выполнения он добавляет сначала удаление пути, затем пытается прочитать этот путь, который уже свободен;отсюда ошибка.

Возможный обходной путь - сначала записать в какое-нибудь временное местоположение, а затем использовать его в качестве источника, переопределить в dataset2 location

...