【问题标题】:Python Dask 'Metadata parse failed' error when trying to read_parquet尝试 read_parquet 时出现 Python Dask“元数据解析失败”错误
【发布时间】:2018-04-04 06:41:59
【问题描述】:

我有一个包含多个 .parquet 文件的数据文件夹,这些文件是使用 pandas 和 pyarrow 转换的 .csv 文件。所有文件都有一个名为“Timestamp”的日期时间索引,以及名为“Open”、“High”、“Low”、“Close”、“Volume”的五列,它们都具有相同的 dtype=int32。

我只想将它们全部加载到一个 Dask.Dataframe 中。这是一个代码 sn-p。

import os
import pyarrow as pa
import pyarrow.parquet as pq
import dask.dataframe as dd


user = os.getlogin()
data_path = 'C:\\Users\\%s\\data\\' % user

ds = dd.read_parquet(data_path)  # error
ds = dd.read_parquet(data_path, index='Timestamp')  # error

但这样做会返回错误 'fastparquet.util.ParquetException: Metadata parse failed: # data_path'

所以我尝试手动访问单个文件的元数据。

import glob

files = ['%s' % s for s in glob.glob(data_path + '*.parquet')]

for file in files:
    print(pq.read_metadata(file))  # no error returned

ds = dd.read_parquet(files)  # error
ds = dd.read_parquet(files, index='Timestamp')  # error

怎么了?

【问题讨论】:

  • 请注意,通常最好包含尽可能多的细节:生成数据的代码和您收到的完整回溯。

标签: python parquet dask


【解决方案1】:

要使用箭头而不是 fastparquet 读取数据,您需要

ds = dd.read_parquet(data_path, engine='arrow')

由于数据是由箭头写入的,应该可以工作。

使用 fastparquet 加载数据是令人担忧的,并且可能是一个错误。我注意到您使用的是 Windows 路径,所以这可能是问题所在。我鼓励您尝试使用 https://github.com/dask/fastparquet/pull/232 ,看看它是否可以为您解决问题。

【讨论】:

  • 使用 engine='arrow' 解决了这个问题,谢谢!顺便说一句,目前“修复”Windows路径的解决方案有点“笨拙”,这是一个应该修复的错误的临时解决方案,所以我暂时只使用箭头引擎。
  • 欢迎您对 PR 提供反馈 - 笨拙是它尚未合并的原因。
猜你喜欢
  • 2015-05-26
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 2012-05-02
  • 1970-01-01
  • 2021-10-17
  • 2022-01-16
相关资源
最近更新 更多