簡體   English   中英

為什么在 AWS Glue pyspark 中使用 UDF 添加派生列后,將 DataFrame 寫入 S3(或將動態幀寫入 Redshift)會出錯?

[英]Why is write DataFrame to S3 (or write dynamic frame to Redshift) giving error after adding derived column using UDF in AWS Glue pyspark?

我在 pyspark 中有一個帶有 ETL 腳本的 AWS Glue 作業,它將動態幀寫入 redshift 作為表,並將 s3 作為 json 寫入。 此 df 中的一列是status_date 我在寫這個 df 時沒有問題。

然后我需要根據status_date再添加兩列Financial_yearFinancial_qarter 為此,我創建了一個 udf,添加了兩個新列。 使用 printSchema() 和 show() 我看到成功創建了列並且收集了列中的值。

當我嘗試將其寫入 aws s3 和 aws redshift 時,問題就出現了。 它給出了一個我無法解決的奇怪錯誤。

寫入 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 - 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 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 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)
>   

您是否嘗試在代碼中寫入同一位置兩次? 例如:如果您已經在代碼中寫入位置 s3://bucket_name/folder1/folder2/folder3/folder4/24022020124055 一次,並且正在嘗試在相同的代碼中再次執行此操作,則它將不起作用。

我遇到了這個錯誤,花了幾天時間才找到原因。 我的問題是由 S3 文件的文件格式/數據類型引起的。 創建 UTF8 文件或將所有數據文件格式更改為 UTF-8。

或者通過按 ID 或某些唯一標識符對源 S3 文件中的記錄進行排序,然后查看最后創建的文件示例 s3://bucket_name/folder1/folder2/folder3/folder4/24022020150358/part-xxxx 來查找“壞”記錄

找到此文件中的最后一條記錄並將其與源文件相對應。 在我的例子中,prblm 記錄比導入的最后一條記錄多 3 到 7 行。 如果它是一個特殊字符,那么您需要更改文件格式。

或者快速檢查只是刪除該特殊字符並重新檢查輸出文件,如果它超過了之前的“壞”記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM