一、Spark配置加载优化
- 减少shuffle分区
- 减少并行度
- 关闭自适应优化(小数据更快)
- 足够Driver内存
- 启用Arrow加速
- 关闭UI减少开销
- 本地模式,避免网络开销
python
%%time
# 初始化计时
import time
import pandas as pd
from pyspark.sql import SparkSession
from pyspark.storagelevel import StorageLevel
# 创建优化的SparkSession(针对小数据调试)
spark = SparkSession.builder \
.appName("JupyterDebug") \
.config("spark.sql.shuffle.partitions", "1") \ # 减少shuffle分区
.config("spark.default.parallelism", "1") \ # 减少并行度
.config("spark.sql.adaptive.enabled", "false") \ # 关闭自适应优化(小数据更快)
.config("spark.driver.memory", "2g") \ # 足够Driver内存
.config("spark.sql.execution.arrow.pyspark.enabled", "true") \ # 启用Arrow加速
.config("spark.ui.enabled", "false") \ # 关闭UI减少开销
.master("local[*]") \ # 本地模式,避免网络开销
.getOrCreate()
二、缓存策略
python
%%time
# 数据加载代码
# df1 = get_df1(spark)
df1 = df1.persist(StorageLevel.MEMORY_AND_DISK) # 缓存加速。生产场景应根据数据量或通过配置项决定是否缓存
df1.cache()
df1.show(20)
df1.printSchema()
print(f"columns count: {len(df1.columns)}")
print(f"columns: {df1.olumns}")
三、 建议
- 优化分区、网络配置加速运行 :避免网络开销,使用
master("local[*]") - 预先缓存策略 :在
show()之前先persist()和cache()并触发缓存,注意生产应通过配置或数据量合理控制使用缓存,避免内存问题。 - 利用Jupyter特性 :使用
display()、交互式变量查看