gpt4 book ai didi

python - Pandas 无法读取在 PySpark 中创建的 Parquet 文件

转载 作者:太空宇宙 更新时间:2023-11-04 02:08:06 25 4
gpt4 key购买 nike

我正在通过以下方式从 Spark DataFrame 编写 Parquet 文件:

df.write.parquet("path/myfile.parquet", mode = "overwrite", compression="gzip")

这会创建一个包含多个文件的文件夹。

当我尝试将其读入 pandas 时,出现以下错误,具体取决于我使用的解析器:

import pandas as pd
df = pd.read_parquet("path/myfile.parquet", engine="pyarrow")

PyArrow:

File "pyarrow\error.pxi", line 83, in pyarrow.lib.check_status

ArrowIOError: Invalid parquet file. Corrupt footer.

快速 Parquet :

File "C:\Program Files\Anaconda3\lib\site-packages\fastparquet\util.py", line 38, in default_open return open(f, mode)

PermissionError: [Errno 13] Permission denied: 'path/myfile.parquet'

我正在使用以下版本:

  • 星火 2.4.0
  • Pandas 0.23.4
  • pyarrow 0.10.0
  • 快速 Parquet 0.2.1

我尝试了 gzip 和 snappy 压缩。两者都不起作用。我当然确保我的文件位于 Python 具有读/写权限的位置。

如果有人能够重现此错误,那将会有所帮助。

最佳答案

问题是 Spark 由于其分布式特性而对文件进行分区(每个执行程序在接收文件名的目录中写入一个文件)。这不是 Pandas 支持的东西,它需要一个文件,而不是一个路径。

您可以通过不同的方式规避此问题:

  • 使用替代实用程序读取文件,例如 pyarrow.parquet.ParquetDataset,然后将其转换为 Pandas(我没有测试此代码)。

      arrow_dataset = pyarrow.parquet.ParquetDataset('path/myfile.parquet')
    arrow_table = arrow_dataset.read()
    pandas_df = arrow_table.to_pandas()
  • 另一种方法是分别读取单独的片段,然后将它们连接起来,正如这个答案所建议的:Read multiple parquet files in a folder and write to single csv file using python

关于python - Pandas 无法读取在 PySpark 中创建的 Parquet 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54201799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com