【问题标题】:AWS Glue ETL Job fails with AnalysisException: u'Unable to infer schema for Parquet. It must be specified manually.;'AWS Glue ETL 作业失败并出现 AnalysisException: u'Unable to infer schema for Parquet。必须手动指定。;'
【发布时间】:2017-11-14 11:06:10
【问题描述】:

我正在尝试创建 AWS Glue ETL 作业,它将存储在 S3 中的 parquet 文件中的数据加载到 Redshift 表中。 Parquet 文件是使用带有“简单”文件模式选项的 pandas 写入到 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 目录中创建一个表,并且可以从 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 中是否有一些建议?

【问题讨论】:

  • 您可以使用红移光谱直接处理您的镶木地板文件吗?
  • 我也遇到了同样的问题。你想清楚了吗?
  • @rileyss 不幸的是没有。后来我没有玩弄它。这在当时是一个考验。

标签: amazon-web-services apache-spark parquet aws-glue


【解决方案1】:

Redshift 不支持拼花格式。 Redshift Spectrum 可以。 Athena 也支持 parquet 格式。

【讨论】:

    【解决方案2】:

    您面临的错误是因为当从 spark/glue 从 s3 读取镶木地板文件时,它期望数据位于 hive 分区中,即分区名称应该具有键值对,您将拥有Hive 样式分区中的 s3 层次结构如下所示

    s3://your-bucket/parquet_table/id=1/file1.parquet

    s3://your-bucket/parquet_table/id=2/file2.parquet

    等等..

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

    位置:s3://your-bucket/parquet_table

    如果s3中的数据按上述方式分区,就不会遇到任何问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      相关资源
      最近更新 更多