pyarrow读取拼花地板文件故障排除(行数正确,但表不包含行)

2024-10-03 17:21:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python3在JupyterLab笔记本上工作,其中有pandas和{}。我有一些AWS成本数据以拼花格式存储(文件存储在本地)。我试图用read_parquet将这些数据读入Pandas数据框:

df = pd.read_parquet(datafile)
len(df.index)

这将返回0,并且display(df)确认数据帧中没有行:

^{pr2}$

但是,如果我尝试用pyarrow检查文件:

import pyarrow.parquet as pq

pqfile = pq.ParquetFile(datafile)
table = pq.read_table(datafile)

pqfile.metadata

笔记本显示:

<pyarrow._parquet.FileMetaData object at 0x119641188>
  created_by: parquet-mr version 1.8.2-SNAPSHOT (build 65c96b16c98f9d933b98681d5f2f9e2410abe85c)
  num_columns: 156
  num_rows: 999841
  num_row_groups: 1
  format_version: 1.0
  serialized_size: 18171

因此,文件中的行数接近1M。但是,如果我尝试读取行:

rg = pqfile.read_row_group(0)
rg.num_rows

最后一行再次返回“0”。如果我只调用pq.read_tablepq.read_table(...).to_pandas()per example in the Arrow docs),我得到的结果是相同的。在

我已经安装了parquet工具,可以读取模式和元数据并获得相同的行数。但是我没有将任何行读取到Pandas数据帧或Pyarrow表中。在

第一次使用这些数据,所以寻找一些可以尝试的方法来解决问题。有什么想法吗?在

更新1:注意到在来自parquet-tools的模式报告中,每个字段都是必需的,但是当我使用cat sub命令时,许多字段没有明显的值。这会导致行无法加载吗?在

更新2:一位同事已经在自己的Python+pyarrow环境中成功地读取了该文件,但似乎有不同的包和包版本。现在正在努力复制他的环境。在

更新3:AWS生成Parquet文件并将其存储在S3中。这是他们的“AWS成本和使用报告”的一部分,可在他们的计费管理中找到。生成的文件稍后将加载到Athena中,尽管我没有那样使用它。在

更新4:如果我使用Jupyter Notebook(6.0.1),我的代码现在可以工作了。不适用于JupyerLab(1.1.3)。想弄清楚区别是什么。。。在


Tags: 文件数据awspandasdfreadtable笔记本