我正在尝试读取存储在s3存储桶中的分区镶木地板目录。
为解决这个问题,我们将其称为存储桶bucket
。该存储桶有一个文件夹,该文件夹具有根据年/月/日/小时的后续分区。
因此,如果要访问.parquet文件,则URL为:
s3://bucket/folder/year/month/day/hour
我试图阅读它,就像处理其他任何镶木地板文件一样。我最近一直在和他们一起工作。但是,到目前为止,我还没有尝试读取分区文件。
我在下面添加了示例代码:
import s3fs
import pandas as pd
import boto3
# Creating an S3 Filesystem (Only required when using S3)
s3 = s3fs.S3FileSystem()
s3_path = "s3://bucket"
directory = 'folder'
# Loading Files (S3)
data = pq.ParquetDataset(f'{s3_path}/{directory}', filesystem = s3).read_pandas().to_pandas()
这是我使用的流程,我知道它适用于常规镶木地板文件。现在,我得到的错误是:
ValueError: Directory name did not appear to be a partition: 2019
我已经尝试进入2019
,因为我发现第一级仅以2019
作为文件夹,因此它可能会认为它是子目录而不是分区。
然后路径看起来像s3://bucket/folder/2019
但是,这给了我以下类似的错误:
ValueError: Directory name did not appear to be a partition: 05
我还尝试使用fastparquet
来解决以下问题:How to read partitioned parquet files from S3 using pyarrow in python
那也不起作用。如果我尝试使用上述问题答案中的all_paths_from_s3
打印文件列表,则会给我一个空白列表[]
。
答案 0 :(得分:0)
发生这种情况是因为分区路径应如下所示:
s3:// bucket / folder / year = 2019 / month = 05 / day = 01
如果您正在使用 Kinesis Firehose 将数据持久保存到S3存储桶中(例如),则可以使用 prefix 选项覆盖默认的AWS 年/月/日/小时格式。