如何手动将spark-redshift AVRO文件加载到Redshift中?

时间:2017-07-24 19:22:18

标签: apache-spark amazon-redshift avro spark-avro

我有一个Spark作业在写入的COPY部分失败了。我已经在S3中处理了所有输出,但是我无法弄清楚如何手动加载它。

COPY table
FROM 's3://bucket/a7da09eb-4220-4ebe-8794-e71bd53b11bd/part-'
CREDENTIALS 'aws_access_key_id=XXX;aws_secret_access_key=XXX'
format as AVRO 'auto'

在我的文件夹中有一个_SUCCESS_committedxxx_startedxxx文件,然后是99个文件,所有文件都以前缀part-开头。当我运行这个时,我得到stl_load_error - > Invalid AVRO file found. Unexpected end of AVRO file.如果我取消该前缀,那么我得到:

[XX000] ERROR: Invalid AVRO file Detail: ----------------------------------------------- error: Invalid AVRO file code: 8001 context: Cannot init avro reader from s3 file Incorrect Avro container file magic number query: 10882709 location: avropath_request.cpp:432 process: query23_27 [pid=10653] -----------------------------------------------

这可能吗?保存处理会很好。

1 个答案:

答案 0 :(得分:1)

我从Redshift得到了同样的错误。

删除_committedxxx和_startedxxx文件后,COPY正常工作(_SUCCESS文件没问题)。

如果s3中有许多目录,可以使用aws cli清除这些文件:

aws s3 rm s3://my_bucket/my/dir/ --include "_comm*" --exclude "*.avro" --exclude "*_SUCCESS" --recursive

请注意,cli似乎有一个bug, - include" _comm *"不适合我。因此它试图删除所有文件。使用" - 排除* .avro"诀窍。小心并首先使用--dryrun运行命令!!