Spark 是当前最流行的大数据计算引擎相比 Hadoop MapReduce 性能提升 10~100 倍。本文从零搭建 Spark 开发环境用 Python 编写第一个 Spark 程序。一、Spark 是什么Spark 是一个分布式计算框架可以在成百上千台服务器上并行处理数据。对比Hadoop MapReduceSpark计算速度慢磁盘读写快 10~100 倍内存计算易用性Java 编写代码量大Python/Java/Scala 均可适用场景离线批处理批处理 SQL 流处理 机器学习二、环境搭建1. 安装 SparkWindows/Linux# 1. 下载 Spark需预装 Java 8wgethttps://dlcdn.apache.org/spark/spark-3.5.0/spark-3.5.0-bin-hadoop3.tgz# 2. 解压tar-xzfspark-3.5.0-bin-hadoop3.tgzmvspark-3.5.0-bin-hadoop3 /opt/spark# 3. 配置环境变量exportSPARK_HOME/opt/sparkexportPATH$PATH:$SPARK_HOME/bin2. 安装 PySparkpipinstallpyspark3. 验证安装# 进入 Spark Shell交互式环境pyspark# 看到这个界面说明安装成功# Welcome to Spark version 3.5.0三、核心概念概念说明RDD弹性分布式数据集Spark 的核心抽象DataFrame带列名的分布式数据集类似 PandasSparkSessionSpark 应用的入口Task任务被发送到 executor 执行Partition数据分区每个分区对应一个 task四、第一个 Spark 程序1. 读取数据frompyspark.sqlimportSparkSession# 创建 SparkSessionsparkSparkSession.builder \.appName(FirstSparkApp)\.getOrCreate()# 读取 CSV 文件dfspark.read.csv(students.csv,headerTrue,inferSchemaTrue)# 查看数据df.show(5)df.printSchema()2. 数据转换frompyspark.sql.functionsimportcol,avg,count# 筛选成绩大于 60 分的学生df.filter(col(score)60).show()# 按班级分组统计平均分df.groupBy(class_name)\.agg(avg(score).alias(avg_score),count(*).alias(student_count))\.orderBy(avg_score,ascendingFalse)\.show()五、实战学生成绩统计分析frompyspark.sqlimportSparkSessionfrompyspark.sql.functionsimportcol,avg,max,min,count,when# 创建会话sparkSparkSession.builder.appName(ScoreAnalysis).getOrCreate()# 读取数据dfspark.read.csv(scores.csv,headerTrue,inferSchemaTrue)# 1. 数据概览print(f总记录数:{df.count()})df.describe().show()# 2. 各班级平均分df.groupBy(class)\.agg(avg(score).alias(平均分),max(score).alias(最高分),min(score).alias(最低分))\.orderBy(平均分,ascendingFalse)\.show()# 3. 成绩分布df.withColumn(等级,when(col(score)90,优秀).when(col(score)80,良好).when(col(score)70,中等).when(col(score)60,及格).otherwise(不及格)).groupBy(等级).agg(count(*).alias(人数))\.orderBy(等级).show()spark.stop()六、Spark SQLSpark 支持用 SQL 语句查询数据适合熟悉 SQL 的开发者# 将 DataFrame 注册为临时表df.createOrReplaceTempView(students)# 用 SQL 查询resultspark.sql( SELECT class_name, ROUND(AVG(score), 2) as avg_score, COUNT(*) as count FROM students WHERE score 60 GROUP BY class_name ORDER BY avg_score DESC )result.show()七、性能优化建议1. 合理设置分区数# 默认分区数偏小大数据量时调整spark.conf.set(spark.sql.shuffle.partitions,200)2. 使用缓存# 频繁使用的数据缓存到内存df.cache()# 或df.persist()3. 避免使用 UDF# ❌ 慢使用 Python UDFfrompyspark.sql.functionsimportudf# ✅ 快使用内置函数frompyspark.sql.functionsimportwhen,col总结Spark 是大数据领域的核心技术掌握它之后处理海量数据不再是难题。记住三步创建 SparkSession—— 入口读取数据——spark.read.csv/json/parquet数据转换——filter、groupBy、agg等操作 觉得有用的话点赞 关注【张老师技术栈】吧每周更新 Java/Python/爬虫 大数据 实战干货不让你白来。