You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Polars LazyFrame通过PartitionByKey写入S3性能异常缓慢的原因排查

使用PartitionByKey将LazyFrame写入S3时性能大幅下降的原因排查

我想搞清楚为什么用PartitionByKey把LazyFrame写入S3时,性能比其他方式差这么多。以下是我用来对比本地磁盘和S3写入性能的测试脚本:

import time

import polars as pl
import numpy as np

l = 600_000_000

data = pl.DataFrame({"a": np.random.randint(0, 100, l),
    "b": np.random.randint(0, 100, l)})

t0 = time.time()
data.write_parquet("/tmp/in-memory.parquet",
    compression="zstd", compression_level=6)
t1 = time.time()

print(f"in-memory, local write: {t1-t0:0.2f}s")

t0 = time.time()
data.write_parquet("s3://bucket/in-memory.parquet",
    compression="zstd", compression_level=6)
t1 = time.time()

print(f"in-memory, s3 write: {t1-t0:0.2f}s")

lazy = data.lazy()

t0 = time.time()
lazy.sink_parquet(
        pl.PartitionByKey(
            base_path="/tmp/lazy",
            file_path=lambda ctx: f"{ctx.keys[0]}.parquet",
            by="a",
            include_key=True),
        mkdir=True,
        compression="zstd",
        compression_level=6,
        maintain_order=False,
        )
t1 = time.time()

print(f"lazy, local write: {t1-t0:0.2f}s")

t0 = time.time()
lazy.sink_parquet(
        pl.PartitionByKey(
            base_path="s3://bucket/lazy/",
            file_path=lambda ctx: f"{ctx.keys[0]}.parquet",
            by="a",
            include_key=True),
        mkdir=True,
        compression="zstd",
        compression_level=6,
        maintain_order=False,
        )
t1 = time.time()

print(f"lazy, s3 write: {t1-t0:0.2f}s")

我在AWS EC2 r8g.xlarge实例上运行该脚本,实例配置:4核CPU,gp3磁盘(默认125MB/s带宽),网络带宽最高12.5Gbps(比磁盘速度快),使用Polars版本1.34.0。测试结果如下:

in-memory, local write: 11.13s
in-memory, s3 write: 5.34s
lazy, local write: 3.73s
lazy, s3 write: 18.62s

前三项结果符合预期:多核并行或更快的网络能提升性能。但最后一项——LazyFrame通过PartitionByKey写入S3的耗时却异常长。按我的理解,这应该是最快的方式才对,因为它既能利用所有核心,又能借助比磁盘更快的网络。我是不是操作有误?或者遗漏了什么配置?


内容的提问来源于stack exchange,提问作者Stephen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 03:43:14