如何使用 pyarrow 从 s3 读取分区的镶木地板文件?
How do I read partitioned parquet files from s3 using pyarrow?
我正在尝试读取存储在 s3 存储桶中的分区镶木地板目录。
为了这个问题,我们称这个桶为bucket
。存储桶有一个文件夹,该文件夹具有基于 year/month/day/hour.
的后续分区
因此,如果要访问 .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
按照这个问题的方法:
那也没用。如果我尝试使用上述问题的答案中的 all_paths_from_s3
打印文件列表,它会给我一个空白列表 []
.
发生这种情况是因为分区路径应该如下所示:
s3://bucket/folder/year=2019/month=05/day=01
如果您使用 Kinesis Firehose 将数据保存到 S3 存储桶(例如),您可以使用 prefix 选项覆盖默认的 AWS year/month/day/hour 格式。
我正在尝试读取存储在 s3 存储桶中的分区镶木地板目录。
为了这个问题,我们称这个桶为bucket
。存储桶有一个文件夹,该文件夹具有基于 year/month/day/hour.
因此,如果要访问 .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
按照这个问题的方法:
那也没用。如果我尝试使用上述问题的答案中的 all_paths_from_s3
打印文件列表,它会给我一个空白列表 []
.
发生这种情况是因为分区路径应该如下所示:
s3://bucket/folder/year=2019/month=05/day=01
如果您使用 Kinesis Firehose 将数据保存到 S3 存储桶(例如),您可以使用 prefix 选项覆盖默认的 AWS year/month/day/hour 格式。