我正在通过以下方式从 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
