Почему запись DataFrame в S3 (или запись динамического c фрейма в Redshift) выдает ошибку после добавления производного столбца с использованием UDF в AWS Pyspark Glue? - PullRequest
0 голосов
/ 25 февраля 2020

У меня был AWS Glue Job со скриптом ETL в pyspark, который записывал динамический c фрейм в красное смещение в виде таблицы и в s3 как json. Один из столбцов в этом df: status_date . У меня не было проблем с написанием этого df.

У меня тогда было требование добавить еще два столбца financial_year и financial_qarter на основе status_date, Для этого я создал udf добавил две новые колонки. Используя printSchema () и show (), я увидел, что столбцы были успешно созданы, а значения в столбцах были собраны.

Проблема возникла, когда я попытался записать это в aws s3 и aws красное смещение. Это выдаёт странную ошибку, которую я не могу устранить.

Ошибка при записи в Redshift - An error occurred while calling o177.pyWriteDynamicFrame. File already exists:s3://aws-glue-temporary-***********-ap-south-1/ShashwatS/491bb37a-404a-4ec5-a459-5534d94b0206/part-00002-af529a71-7315-4bd1-ace5-91ab5d9f7f46-c000.csv

Ошибка при записи в s3 как json - An error occurred while calling o175.json. File already exists:s3://bucket_name/folder1/folder2/folder3/folder4/24022020124055/part-00026-fd481713-2ccc-4d23-98b0-e96908cb708c-c000.json

Как видите, обе ошибки похожи. Ниже приведен след ошибки. Некоторая помощь требуется.

> org.apache.spark.SparkException: Job aborted due to stage failure:
> Task 3 in stage 503.0 failed 4 times, most recent failure: Lost task
> 3.3 in stage 503.0 (, executor 15):
> org.apache.hadoop.fs.FileAlreadyExistsException: File already
> exists:s3://bucket_name/folder1/folder2/folder3/folder4/24022020150358/part-00003-055f9327-1368-4ba7-9216-6a32afac1843-c000.json
>   at
> com.amazon.ws.emr.hadoop.fs.s3.upload.plan.RegularUploadPlanner.checkExistenceIfNotOverwriting(RegularUploadPlanner.java:36)
>   at
> com.amazon.ws.emr.hadoop.fs.s3.upload.plan.RegularUploadPlanner.plan(RegularUploadPlanner.java:30)
>   at
> com.amazon.ws.emr.hadoop.fs.s3.upload.plan.UploadPlannerChain.plan(UploadPlannerChain.java:37)
>   

1 Ответ

0 голосов
/ 26 февраля 2020

Пытаетесь ли вы дважды писать в одно и то же место в вашем коде ?? Например: если вы уже записали один раз в свой код s3: // bucket_name / folder1 / folder2 / folder3 / folder4 / 24022020124055 и пытаетесь сделать это снова в том же коде, это не будет работать.

...