我正在使用pyarrow(0.12.1)从s3中读取实木复合地板对象
这是我正在使用的代码:
s3 = s3fs.S3FileSystem()
base_pya_dataset = ParquetDataset('s3://bucket1/source/schema/table_name/2019_10_31_19_59_16', filesystem=s3)
尝试创建ParquetDataset时出现以下错误:
"errorMessage": "Corrupted file, smaller than file footer",
"errorType": "ArrowIOError",
我在做什么错?让我感到困惑的是,我之前(昨天)进行过这项工作。除了我正在使用的镶木地板文件外,我发现的所有内容都没有改变。实木复合地板文件必须是某种类型的吗?
我已经尝试过: -添加尾随正斜杠
当我将其输入到一个文件的路径时,它可以工作。显然,尝试从我提供的目录中获取文件的方式存在问题。
答案 0 :(得分:1)
该错误可能意味着它正在尝试读取不是Parquet的文件。
我建议升级到最新版本的pyarrow(0.15.1),然后重试。自0.12.1以来,已经有了很多发展,有可能您遇到的任何一个角落都已得到解决。
答案 1 :(得分:0)
经过更多测试后,似乎ParquetDataset功能不能简单地作用于目录中的Parquet文件(甚至单个文件)(即使它们都具有相同的架构)。当我将分区的实木复合地板文件放在目录(从spark输出)中时,没有收到错误。
即使我从spark下载那些分区的镶木地板文件,然后将它们重新升级到s3,读取也会失败。我无法想象下载镶木地板文件然后将其重新上传到s3会导致架构混乱到引发异常的地步(尤其是因为我没有打开或修改实际的镶木地板文件)。
这很奇怪,因为依靠它使人感到不安。