使用 Polars 读取按日期键分区的最新 S3 parquet 文件

问题描述 投票:0回答:1

我将镶木地板文件存储在 s3 位置,这些文件按日期键分区。使用 Polars,我需要从最新的日期密钥文件夹中读取镶木地板文件。这是我的 s3 结构的示例:

Amazon S3>存储桶>存储桶名称>dev/>target/>refined/>STUDENTS.parquet/

STUDENTS.parquet 下,有几个按 DATE_KEY 分区的文件夹,即

每个文件夹都包含镶木地板文件。

使用 Polars,我需要将最新日期密钥文件夹(本例中为 DATE_KEY=2024-03-06/)中的镶木地板文件读取到 Polars 数据框中。

您认为对名称文件夹进行降序排序是实现此目的的一种方法吗?

有人可以帮我解决他的问题吗,因为我需要的是 Polars 数据框而不是 Pandas。

python-3.x pandas amazon-s3 parquet python-polars
1个回答
0
投票

我看到有两种方法可以实现这一目标。

  1. 将整个数据集扫描到 LazyFrame 中并动态过滤。
  2. 读取 S3 中的文件夹名称,并仅扫描文件夹中最新日期的 parquet 文件。

选项 1. 将整个数据集扫描到
pl.LazyFrame
并动态过滤。

import boto3
import polars as pl

profile = "your-profile"
s3_path = "s3://path/to/your/dataset/*/*.parquet"

session = boto3.session.Session(profile_name=profile)
credentials = session.get_credentials().get_frozen_credentials()

df = (
    pl.scan_parquet(
        s3_path,
        storage_options={  
            "aws_access_key_id": credentials.access_key,
            "aws_secret_access_key": credentials.secret_key,
            "aws_session_token": credentials.token,
            "aws_region": session.region_name,
        },
    )
    .filter(
        # filter for latest DATE_KEY
        pl.col("DATE_KEY") == pl.col("DATE_KEY").max()
    )
    .collect()
)
© www.soinside.com 2019 - 2024. All rights reserved.