无法从镶木地板中读取零件文件

Posted

技术标签:

【中文标题】无法从镶木地板中读取零件文件【英文标题】:Not able read part files from parquet 【发布时间】:2020-01-08 09:15:59 【问题描述】:

HIVE_CURSOR_ERROR:无法读取文件 s3://xx/xxxx/part-xxxxxxxxxx.parquet 中块 0 中 0 处的值。

我使用 AWS 胶水动态框架写入 API 创建了镶木地板文件,当我尝试从胶水目录表中读取 AWS athena 时,收到此错误。

当我尝试通过动态框架通过胶水目录读取此文件时,这似乎很好,但 Athena 给出了上述错误。

使用 avro 格式,似乎没有问题。

CREATE EXTERNAL TABLE `table_name`(
`column_name_1` string, 
`column_name_2` string
 )
 ROW FORMAT SERDE 
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
 STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
 OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
 LOCATION
  's3://xxxxxxxxxxx/xxxxx/xxx/'
TBLPROPERTIES (
  'CrawlerSchemaDeserializerVersion'='1.0', 
  'CrawlerSchemaSerializerVersion'='1.0', 
  'UPDATED_BY_CRAWLER'='xxxxxxxxxx', 
  'averageRecordSize'='xxxxx', 
  'classification'='parquet', 
  'compressionType'='none', 
  'objectCount'='xxxxx', 
  'recordCount'='xxx', 
  'sizeKey'='xxxx', 
  'typeOfData'='file') 

【问题讨论】:

SHOW CREATE TABLE table_name 和通过爬虫或 DDL 创建的表的输出是什么? @bdcloud,它给了我整个架构和表是通过爬虫创建的 您可以在这里发布输出或用它更新您的问题吗? 您可以尝试在没有表属性的情况下运行 DDL,并检查 parquet 文件架构是否有效github.com/apache/parquet-mr/tree/master/parquet-tools ? 【参考方案1】:

在 athena 的情况下 smallint 存在问题,它没有空值

它不能与 smallint 和任何其他数据类型一起使用,因此我们会遇到上述错误。

解决方案是将 smallint 转换为字符串,然后转换为 parquet 中的 s3

【讨论】:

以上是关于无法从镶木地板中读取零件文件的主要内容,如果未能解决你的问题,请参考以下文章

Spark:从镶木地板中读取一个 int 列,只要

如何从镶木地板文件中获取架构/列名?

如何从镶木地板文件创建表格

重命名后如何从镶木地板文件中恢复旧列值?

从镶木地板表中选择在蜂巢中不返回任何内容

Spark 读取镶木地板文件时出现问题