如何将GCS中多分区Parquet文件加载至Pandas DataFrame?
解决GCS分区Parquet文件合并为Pandas DataFrame的问题
错误原因
你手动拼接文件路径时出现了格式冲突,且ParquetDataset本身支持自动识别Hive风格的分区目录,不需要手动遍历文件。
修正后的最优代码
直接指定根目录,让ParquetDataset自动处理分区和文件加载:
import pandas as pd import gcsfs from pyarrow import parquet # 指定存储根目录 root_path = "gs://path/to/storage/folder/" fs = gcsfs.GCSFileSystem() # 自动识别Hive分区,加载所有子目录下的Parquet文件 dataset = parquet.ParquetDataset(root_path, filesystem=fs, partitioning="hive") multiple_dates_df = dataset.read().to_pandas() print(multiple_dates_df.shape)
关键说明
- 无需手动遍历文件:
ParquetDataset支持解析event_date=YYYY-MM-DD这种Hive风格分区目录,指定partitioning="hive"后,会自动将event_date作为DataFrame的一列。 - 避免路径重复:gcsfs的
glob方法若传入带gs://的路径,返回结果已包含前缀,你之前的拼接会导致路径重复(如gs://gs://xxx),这也是触发错误的核心原因。
备选方案(手动遍历文件的正确写法)
如果必须手动遍历文件,需保证路径格式正确:
import pandas as pd import gcsfs from pyarrow import parquet fs = gcsfs.GCSFileSystem() root_path = "gs://path/to/storage/folder/" # 使用相对路径匹配文件 files = [root_path + path for path in fs.glob("event_date=*/*.parquet")] # 加载所有匹配到的文件 dataset = parquet.ParquetDataset(files, filesystem=fs) multiple_dates_df = dataset.read().to_pandas() print(multiple_dates_df.shape)
内容的提问来源于stack exchange,提问作者Regressor
相关产品推荐
相关产品推荐

