[ PROMPT_NODE_27566 ]
Vaex 性能
[ SKILL_DOCUMENTATION ]
# 性能与优化
本参考指南涵盖了 Vaex 的性能特性,包括惰性求值、缓存、内存管理、异步操作以及处理海量数据集的优化策略。
## 理解惰性求值
惰性求值是 Vaex 性能的基础:
### 惰性求值的工作原理
python
import vaex
df = vaex.open('large_file.hdf5')
# 此处不进行计算 - 仅定义计算内容
df['total'] = df.price * df.quantity
df['log_price'] = df.price.log()
mean_expr = df.total.mean()
# 此处进行计算(当需要结果时)
result = mean_expr # 现在才真正计算平均值
**核心概念:**
- **表达式**是惰性的 - 它们定义计算而不执行它们
- **物化**发生在访问结果时
- **查询优化**在执行前自动进行
### 何时触发求值?
python
# 这些操作会触发求值:
print(df.x.mean()) # 访问值
array = df.x.values # 获取 NumPy 数组
pdf = df.to_pandas_df() # 转换为 pandas
df.export_hdf5('output.hdf5') # 导出
# 这些操作不会触发求值:
df['new_col'] = df.x + df.y # 创建虚拟列
expr = df.x.mean() # 创建表达式
df_filtered = df[df.x > 10] # 创建过滤视图
## 使用 delay=True 进行批处理操作
将多个操作合并执行以获得更好的性能:
### 基本延迟执行
python
# 不使用延迟 - 每个操作都会遍历整个数据集
mean_x = df.x.mean() # 第 1 次遍历数据
std_x = df.x.std() # 第 2 次遍历数据
max_x = df.x.max() # 第 3 次遍历数据
# 使用延迟 - 单次遍历数据集
mean_x = df.x.mean(delay=True)
std_x = df.x.std(delay=True)
max_x = df.x.max(delay=True)
results = vaex.execute([mean_x, std_x, max_x]) # 单次遍历!
print(results[0]) # 平均值
print(results[1]) # 标准差
print(results[2]) # 最大值
### 多列延迟执行
python
# 高效计算多列统计信息
stats = {}
delayed_results = []
for column in ['sales', 'quantity', 'profit', 'cost']:
mean = df[column].mean(delay=True)
std = df[column].std(delay=True)
delayed_results.extend([mean, std])
# 一次性执行所有操作
results = vaex.execute(delayed_results)
# 处理结果
for i, column in enumerate(['sales', 'quantity', 'profit', 'cost']):
stat