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

计算PySpark与Pandas DataFrame大小(MB/GB)的最有效方法

计算PySpark与Pandas DataFrame大小的有效方法

Pandas DataFrame 大小计算

基础内存计算(快速估算)

直接使用memory_usage()方法,默认只计算列的内存,加上deep=True可以准确计算对象类型(如字符串)的实际内存占用:

import pandas as pd

df = pd.DataFrame({'col1': [1, 2, 3], 'col2': ['a', 'b', 'c']})

# 计算总内存(单位字节),转换为MB/GB
total_bytes = df.memory_usage(deep=True).sum()
total_mb = total_bytes / (1024 ** 2)
total_gb = total_bytes / (1024 ** 3)

print(f"DataFrame大小: {total_mb:.2f} MB / {total_gb:.4f} GB")

包含索引的完整统计

若需要统计索引的内存占用,保持memory_usage()默认参数即可(默认index=True):

total_bytes_with_index = df.memory_usage(deep=True).sum()

PySpark DataFrame 大小计算

PySpark为分布式存储,无直接API返回精确总大小,以下是几种实用方法:

方法1:Spark UI查看(最准确)

执行df.cache()将DataFrame缓存到内存,然后访问Spark UI(默认端口4040)的Storage页面,查看该DataFrame的Size in Memory和Size on Disk,页面会自动显示MB/GB单位的大小。

方法2:序列化记录估算

通过单条记录的序列化大小乘以总记录数估算:

# 获取单条记录的序列化字节数
sample_row = df.take(1)[0]
row_size = len(sample_row.serialize())

# 计算总大小
total_rows = df.count()
estimated_bytes = total_rows * row_size
estimated_mb = estimated_bytes / (1024 ** 2)
estimated_gb = estimated_bytes / (1024 ** 3)

print(f"估算DataFrame大小: {estimated_mb:.2f} MB / {estimated_gb:.4f} GB")

注:此方法为近似值,不同记录的序列化大小可能存在差异。

方法3:按列类型估算(数值型列为主场景)

如果DataFrame以数值型列为主,可根据列的字节占用量计算:

total_rows = df.count()
# 假设所有列都是8字节的数值类型(需根据实际列类型调整,如int32为4字节)
col_byte_size = 8
total_cols = len(df.columns)

estimated_bytes = total_rows * total_cols * col_byte_size

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:15:39