AWS Glue ETL 作业失败,并显示 AnalysisException: u'无法推断 Parquet 的架构。它必须手动指定。



我正在尝试创建AWS Glue ETL作业,该作业将把存储在S3中的镶木地板文件中的数据加载到Redshift表中。Parquet文件是使用panda和"简单"文件模式选项写入S3 bucked中的多个文件夹中的。布局如下:

s3://bucket/parquet_table/01/file_1.parquet

s3://bucket/parquet_table/01/file_2.parquet

s3://bucket/parquet_table/01/file_3.parquet

s3://bucket/parquet_table/01/file_1.parquet

s3://bucket/parquet_table/02/file_2.parquet

s3://bucket/parquet_table/02/file_3.parquet

我可以使用AWS Glue Crawler在AWS Glue Catalog中创建一个表,该表可以从Athena查询,但当我尝试创建将同一表复制到Redshift的ETL作业时,它不起作用。

如果我抓取单个文件,或者如果我抓取一个文件夹中的多个文件,它就会工作,只要涉及多个文件夹,我就会得到上面提到的错误

AnalysisException: u'Unable to infer schema for Parquet. It must be specified manually.;'

如果我使用"hive"而不是"简单"架构,则会出现类似的问题。然后我们有多个文件夹,也有空的镶木地板文件,抛出

java.io.IOException: Could not read footer: java.lang.RuntimeException: xxx is not a Parquet file (too small)

在使用AWS Glue(ETL和数据目录)时,是否有一些关于如何读取Parquet文件并在S3中构建它们的建议?

Redshift不支持镶木地板格式。红移光谱的确如此。Athena还支持镶木地板格式。

您面临的错误是,当从spark/glue读取s3中的镶木地板文件时,它希望数据位于配置单元分区中,即分区名称应该具有键值对

s3://你的桶/parquet_table/id=1/file1.parquet

s3://你的桶/parquet_table/id=2/file2.parquet

等等。

然后使用以下路径读取bucket 中的所有文件

位置:s3://您的bucket/parquet_table

如果s3中的数据以上述方式进行分区,您将不会面临任何问题。

相关内容

  • 没有找到相关文章

最新更新