如何用pandas读取Spark写的文件?

How to read files written by Spark with pandas?

当 Spark 将 dateframe 数据写入 parquet 文件时,Spark 将创建一个目录,其中包含多个单独的 parquet 文件。保存代码:

term_freq_df.write
            .mode("overwrite")
            .option("header", "true")
            .parquet("dir/to/save/to")

我需要使用pandas从这个目录读取数据:

term_freq_df = pd.read_parquet("dir/to/save/to") 

错误:

IsADirectoryError: [Errno 21] Is a directory: 

如何使用两个代码示例使用相同文件路径的简单方法解决此问题?

如您所述,保存时 Spark 会在一个目录中创建多个 parquet 文件。要使用 pandas 读取这些文件,您可以单独读取文件,然后连接结果。

import glob
import os
import pandas as pd

path = "dir/to/save/to"
parquet_files = glob.glob(os.path.join(path, "*.parquet"))
df = pd.concat((pd.read_parquet(f) for f in parquet_files))

通常,pandas.read_parquet 可以很好地处理读取多个(分区的)镶木地板文件的目录。所以我很想看看你得到的完整错误回溯。

为了演示这工作正常:

In [82]: pd.__version__ 
Out[82]: '0.25.0'

In [83]: df = pd.DataFrame({'A': ['a', 'b']*2, 'B':[1, 2, 3, 4]})

In [85]: df.to_parquet("test_directory", partition_cols=['A'])

这创建了一个包含多个 parquet 文件的 "test_directory" 文件夹。我可以使用 pandas:

阅读这些内容
In [87]: pd.read_parquet("test_directory/")
Out[87]: 
   B  A
0  1  a
1  3  a
2  2  b
3  4  b