环境准备:Spark 与 Delta Lake 版本兼容性、Maven/SBT 依赖配置、本地开发环境搭建(PySpark + Delta)

说实话,很多初学者在 Delta Lake 上栽的第一个跟头,不是语法问题,而是版本没配好。我记得刚接触 Delta Lake 那会儿,照着网上教程配了一下午,跑起来全是莫名其妙的序列化错误。后来才发现——Spark 和 Delta Lake 的版本必须严格对应,差一个小版本都可能翻车。

这一章,我们就来把环境彻底捋清楚。你跟着我走一遍,保证能跑通第一个 Delta Lake 程序。

版本兼容性:一张表说清楚

Delta Lake 的版本号跟 Spark 是绑定的。为什么?因为 Delta Lake 深度依赖 Spark 的内部 API,尤其是 Catalog、Session 和文件系统接口。Spark 每升一个主版本,这些 API 就可能变。

下面这张表是我在项目中反复验证过的组合,直接照着选就行:

Delta Lake 版本 Apache Spark 版本 Scala 版本 备注
2.4.x 3.4.x 2.12 / 2.13 当前最稳定,推荐生产使用
3.0.x 3.5.x 2.13 支持 Liquid Clustering,新项目可选
2.3.x 3.3.x 2.12 / 2.13 较老,但仍在维护
1.2.x 3.2.x 2.12 已停止维护,不建议新项目使用
⚠️ 我曾经踩过的坑: 用 Delta Lake 2.4.0 配 Spark 3.5.0,结果运行 MERGE 操作时抛出 UnsupportedOperationException。查了半天才发现,2.4.x 只支持到 Spark 3.4.x。所以版本对照表一定要看官方文档的 Release Compatibility 章节。

Maven / SBT 依赖配置

如果你用 Scala + SBT 开发,依赖配置很简单。我个人习惯把 Delta Lake 的版本号抽成一个变量,方便后续升级:

// build.sbt
val deltaVersion = "2.4.0"
val sparkVersion = "3.4.0"

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-sql" % sparkVersion % "provided",
  "io.delta" %% "delta-core" % deltaVersion,
  "io.delta" %% "delta-storage" % deltaVersion
)

Maven 用户看这里:

<properties>
  <delta.version>2.4.0</delta.version>
  <spark.version>3.4.0</spark.version>
</properties>

<dependencies>
  <dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.12</artifactId>
    <version>${spark.version}</version>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>io.delta</groupId>
    <artifactId>delta-core_2.12</artifactId>
    <version>${delta.version}</version>
  </dependency>
  <dependency>
    <groupId>io.delta</groupId>
    <artifactId>delta-storage</artifactId>
    <version>${delta.version}</version>
  </dependency>
</dependencies>
💡 小提示: spark-sql 的 scope 设为 provided,因为运行时 Spark 集群已经提供了这些 jar。如果你打成 fat jar 还带上 Spark 依赖,部署时会跟集群自带的版本冲突,报 NoSuchMethodError 的概率极高。

PySpark + Delta Lake 本地开发环境搭建

我个人最常用的组合是 PySpark + Delta Lake,因为调试方便,写起来也快。下面是我在 Mac 和 Linux 上都验证过的步骤。

第一步:安装 Java 和 Python

Delta Lake 底层跑在 JVM 上,所以 Java 必须装。我建议用 Java 11:

# 检查 Java 版本
java -version
# 输出示例:openjdk version "11.0.20" 2023-07-18 LTS

# 检查 Python 版本(3.8 以上即可)
python --version

第二步:安装 PySpark

直接用 pip 装,但要注意版本号跟 Delta Lake 匹配:

pip install pyspark==3.4.0 delta-spark==2.4.0

这里有个细节——delta-spark 这个包会自动拉取 delta-core 和 delta-storage 的 jar 包。你不需要手动下载任何 jar 文件。

第三步:验证安装

写一个最简单的脚本,跑通就算成功:

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName("DeltaQuickStart") \
    .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") \
    .config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog") \
    .getOrCreate()

# 创建一张 Delta 表
data = [("Alice", 34), ("Bob", 45), ("Cathy", 29)]
df = spark.createDataFrame(data, ["name", "age"])
df.write.format("delta").save("/tmp/delta_table")

# 读取验证
df_read = spark.read.format("delta").load("/tmp/delta_table")
df_read.show()

如果控制台打印出三行数据,恭喜你,环境通了。

⚠️ 注意: 如果你在 Windows 上开发,路径要用 file:///C:/tmp/delta_table 这种格式。另外,Windows 下 PySpark 对中文路径支持不太好,我建议所有路径都用英文。

环境搭建核心流程

下面这张图把整个环境准备的关键步骤串起来了,你照着走就行:

Delta Lake 本地开发环境搭建流程 1. 确定版本组合 2. 安装 Java 11+ 3. pip install pyspark 4. pip install delta-spark 5. 配置 Delta 扩展 6. 运行验证脚本 💡 关键配置 spark.sql.extensions spark.sql.catalog.spark_catalog ⚠️ 常见错误 版本不匹配 → NoSuchMethodError 缺少扩展配置 → AnalysisException

IDE 配置建议

我平时用 VS Code + Jupyter Notebook 做 Delta Lake 的快速原型。你如果也这么配,记得装两个扩展:

  • Python(微软官方)—— 提供 IntelliSense 和调试支持
  • Jupyter —— 直接在 .ipynb 里跑 PySpark 代码

另外,在 Jupyter 里启动 SparkSession 时,我习惯加一行日志控制,不然控制台会被 INFO 日志刷屏:

import logging
logging.getLogger("py4j").setLevel(logging.ERROR)

📌 总结一下: 环境准备的核心就三件事——版本对齐、依赖正确、配置完整。你只要把 Delta Lake 和 Spark 的版本号对上,pip 安装时别搞混,再配好那两个扩展参数,基本不会出问题。