首页 > 解决方案 > 为什么读取 parquet 文件时出现“不是 Parquet 文件”错误

问题描述

从 hdfs 读取 parquet 文件时出现以下错误

2020-06-04 14:11:23 WARN  TaskSetManager:66 - Lost task 44.0 in stage 1.0 (TID 3514, 192.168.16.41, executor 1): java.lang.RuntimeException: hdfs://data-hadoop-hdfs-nn.hadoop:8020/somedata/serviceName=someService/masterAccount=ma/siteAccount=sa/systemCode=111/part-00170-7ff5ac19-98b7-4a5a-b93d-9e988dff07eb.c000.snappy.parquet is not a Parquet file. expected magic number at tail [80, 65, 82, 49] but found [55, 49, 98, 48]

我在互联网上发现了类似的问题,但大多数人试图阅读除 parquet 之外的其他文件类型。我 100% 确定该文件是以 parquet 格式编写的,如日志中所示。文件名是 part-00170-7ff5ac19-98b7-4a5a-b93d-9e988dff07eb.c000.snappy.parquet 。

只有一个作业写入这个 somdata 文件夹,而这个作业只是写 parquet(spark 结构化流作业),结尾也说它是一个 parquet 文件。由同一作业编写的其他镶木地板文件不会引发此错误

标签: apache-sparkhdfsparquet

解决方案


今天遇到同样的错误。对我们来说,问题是我们生成了大于 2GB 的 parquet 文件,这会破坏一些客户端。

https://issues.apache.org/jira/browse/SPARK-24296

设置 spark 选项maxRecordsPerFile来限制为我们固定的文件大小。


推荐阅读