@@ -34,8 +34,13 @@ val all_scala_versions = Seq(scala212, scala213)
34
34
val default_scala_version = settingKey[String ](" Default Scala version" )
35
35
Global / default_scala_version := scala212
36
36
37
+ val LATEST_RELEASED_SPARK_VERSION = " 3.5.0"
38
+ val SPARK_MASTER_VERSION = " 4.0.0-SNAPSHOT"
39
+ val sparkVersion = settingKey[String ](" Spark version" )
40
+ spark / sparkVersion := getSparkVersion()
41
+
37
42
// Dependent library versions
38
- val sparkVersion = " 3.5.0 "
43
+ val defaultSparkVersion = LATEST_RELEASED_SPARK_VERSION
39
44
val flinkVersion = " 1.16.1"
40
45
val hadoopVersion = " 3.3.4"
41
46
val scalaTestVersion = " 3.2.15"
@@ -62,6 +67,37 @@ crossScalaVersions := Nil
62
67
val targetJvm = settingKey[String ](" Target JVM version" )
63
68
Global / targetJvm := " 1.8"
64
69
70
+ /**
71
+ * Returns the current spark version, which is the same value as `sparkVersion.value`.
72
+ *
73
+ * This logic exists in a separate method because some call sites cannot access `sparkVersion.value`
74
+ * e.g. callers that are not inside tasks or setting macros.
75
+ */
76
+ def getSparkVersion (): String = {
77
+ val latestReleasedSparkVersionShort = getMajorMinorPatch(LATEST_RELEASED_SPARK_VERSION ) match {
78
+ case (maj, min, _) => s " $maj. $min"
79
+ }
80
+ val allValidSparkVersionInputs = Seq (
81
+ " master" ,
82
+ " latest" ,
83
+ SPARK_MASTER_VERSION ,
84
+ LATEST_RELEASED_SPARK_VERSION ,
85
+ latestReleasedSparkVersionShort
86
+ )
87
+
88
+ // e.g. build/sbt -DsparkVersion=master, build/sbt -DsparkVersion=4.0.0-SNAPSHOT
89
+ val input = sys.props.getOrElse(" sparkVersion" , LATEST_RELEASED_SPARK_VERSION )
90
+ input match {
91
+ case LATEST_RELEASED_SPARK_VERSION | " latest" | `latestReleasedSparkVersionShort` =>
92
+ LATEST_RELEASED_SPARK_VERSION
93
+ case SPARK_MASTER_VERSION | " master" =>
94
+ SPARK_MASTER_VERSION
95
+ case _ =>
96
+ throw new IllegalArgumentException (s " Invalid sparkVersion: $input. Must be one of " +
97
+ s " ${allValidSparkVersionInputs.mkString(" {" , " ," , " }" )}" )
98
+ }
99
+ }
100
+
65
101
lazy val commonSettings = Seq (
66
102
organization := " io.delta" ,
67
103
scalaVersion := default_scala_version.value,
@@ -90,6 +126,58 @@ lazy val commonSettings = Seq(
90
126
unidocSourceFilePatterns := Nil ,
91
127
)
92
128
129
+ /**
130
+ * Note: we cannot access sparkVersion.value here, since that can only be used within a task or
131
+ * setting macro.
132
+ */
133
+ def crossSparkSettings (): Seq [Setting [_]] = getSparkVersion() match {
134
+ case LATEST_RELEASED_SPARK_VERSION => Seq (
135
+ scalaVersion := default_scala_version.value,
136
+ crossScalaVersions := all_scala_versions,
137
+ targetJvm := " 1.8" ,
138
+ // For adding staged Spark RC versions, e.g.:
139
+ // resolvers += "Apache Spark 3.5.0 (RC1) Staging" at "https://repository.apache.org/content/repositories/orgapachespark-1444/",
140
+ Compile / unmanagedSourceDirectories += (Compile / baseDirectory).value / " src" / " main" / " scala-spark-3.5" ,
141
+ Antlr4 / antlr4Version := " 4.9.3" ,
142
+
143
+ // Java-/Scala-/Uni-Doc Settings
144
+ scalacOptions ++= Seq (
145
+ " -P:genjavadoc:strictVisibility=true" // hide package private types and methods in javadoc
146
+ ),
147
+ unidocSourceFilePatterns := Seq (SourceFilePattern (" io/delta/tables/" , " io/delta/exceptions/" ))
148
+ )
149
+
150
+ case SPARK_MASTER_VERSION => Seq (
151
+ scalaVersion := scala213,
152
+ crossScalaVersions := Seq (scala213),
153
+ targetJvm := " 17" ,
154
+ resolvers += " Spark master staging" at " https://repository.apache.org/content/groups/snapshots/" ,
155
+ Compile / unmanagedSourceDirectories += (Compile / baseDirectory).value / " src" / " main" / " scala-spark-master" ,
156
+ Antlr4 / antlr4Version := " 4.13.1" ,
157
+ Test / javaOptions ++= Seq (
158
+ // Copied from SparkBuild.scala to support Java 17 for unit tests (see apache/spark#34153)
159
+ " --add-opens=java.base/java.lang=ALL-UNNAMED" ,
160
+ " --add-opens=java.base/java.lang.invoke=ALL-UNNAMED" ,
161
+ " --add-opens=java.base/java.io=ALL-UNNAMED" ,
162
+ " --add-opens=java.base/java.net=ALL-UNNAMED" ,
163
+ " --add-opens=java.base/java.nio=ALL-UNNAMED" ,
164
+ " --add-opens=java.base/java.util=ALL-UNNAMED" ,
165
+ " --add-opens=java.base/java.util.concurrent=ALL-UNNAMED" ,
166
+ " --add-opens=java.base/sun.nio.ch=ALL-UNNAMED" ,
167
+ " --add-opens=java.base/sun.nio.cs=ALL-UNNAMED" ,
168
+ " --add-opens=java.base/sun.security.action=ALL-UNNAMED" ,
169
+ " --add-opens=java.base/sun.util.calendar=ALL-UNNAMED"
170
+ )
171
+
172
+ // Java-/Scala-/Uni-Doc Settings
173
+ // This isn't working yet against Spark Master.
174
+ // 1) delta-spark on Spark Master uses JDK 17. delta-iceberg uses JDK 8 or 11. For some reason,
175
+ // generating delta-spark unidoc compiles delta-iceberg
176
+ // 2) delta-spark unidoc fails to compile. spark 3.5 is on its classpath. likely due to iceberg
177
+ // issue above.
178
+ )
179
+ }
180
+
93
181
lazy val spark = (project in file(" spark" ))
94
182
.dependsOn(storage)
95
183
.enablePlugins(Antlr4Plugin )
@@ -99,29 +187,26 @@ lazy val spark = (project in file("spark"))
99
187
scalaStyleSettings,
100
188
sparkMimaSettings,
101
189
releaseSettings,
190
+ crossSparkSettings(),
102
191
libraryDependencies ++= Seq (
103
192
// Adding test classifier seems to break transitive resolution of the core dependencies
104
- " org.apache.spark" %% " spark-hive" % sparkVersion % " provided" ,
105
- " org.apache.spark" %% " spark-sql" % sparkVersion % " provided" ,
106
- " org.apache.spark" %% " spark-core" % sparkVersion % " provided" ,
107
- " org.apache.spark" %% " spark-catalyst" % sparkVersion % " provided" ,
193
+ " org.apache.spark" %% " spark-hive" % sparkVersion.value % " provided" ,
194
+ " org.apache.spark" %% " spark-sql" % sparkVersion.value % " provided" ,
195
+ " org.apache.spark" %% " spark-core" % sparkVersion.value % " provided" ,
196
+ " org.apache.spark" %% " spark-catalyst" % sparkVersion.value % " provided" ,
108
197
109
198
// Test deps
110
199
" org.scalatest" %% " scalatest" % scalaTestVersion % " test" ,
111
200
" org.scalatestplus" %% " scalacheck-1-15" % " 3.2.9.0" % " test" ,
112
201
" junit" % " junit" % " 4.12" % " test" ,
113
202
" com.novocode" % " junit-interface" % " 0.11" % " test" ,
114
- " org.apache.spark" %% " spark-catalyst" % sparkVersion % " test" classifier " tests" ,
115
- " org.apache.spark" %% " spark-core" % sparkVersion % " test" classifier " tests" ,
116
- " org.apache.spark" %% " spark-sql" % sparkVersion % " test" classifier " tests" ,
117
- " org.apache.spark" %% " spark-hive" % sparkVersion % " test" classifier " tests" ,
203
+ " org.apache.spark" %% " spark-catalyst" % sparkVersion.value % " test" classifier " tests" ,
204
+ " org.apache.spark" %% " spark-core" % sparkVersion.value % " test" classifier " tests" ,
205
+ " org.apache.spark" %% " spark-sql" % sparkVersion.value % " test" classifier " tests" ,
206
+ " org.apache.spark" %% " spark-hive" % sparkVersion.value % " test" classifier " tests" ,
118
207
),
119
- // For adding staged Spark RC versions, Ex:
120
- // resolvers += "Apche Spark 3.5.0 (RC1) Staging" at "https://repository.apache.org/content/repositories/orgapachespark-1444/",
121
208
Compile / packageBin / mappings := (Compile / packageBin / mappings).value ++
122
209
listPythonFiles(baseDirectory.value.getParentFile / " python" ),
123
-
124
- Antlr4 / antlr4Version:= " 4.9.3" ,
125
210
Antlr4 / antlr4PackageName := Some (" io.delta.sql.parser" ),
126
211
Antlr4 / antlr4GenListener := true ,
127
212
Antlr4 / antlr4GenVisitor := true ,
@@ -132,10 +217,6 @@ lazy val spark = (project in file("spark"))
132
217
// Don't execute in parallel since we can't have multiple Sparks in the same JVM
133
218
Test / parallelExecution := false ,
134
219
135
- scalacOptions ++= Seq (
136
- " -P:genjavadoc:strictVisibility=true" // hide package private types and methods in javadoc
137
- ),
138
-
139
220
javaOptions += " -Xmx1024m" ,
140
221
141
222
// Configurations to speed up tests and reduce memory footprint
@@ -172,11 +253,11 @@ lazy val spark = (project in file("spark"))
172
253
Seq (file)
173
254
},
174
255
TestParallelization .settings,
175
-
176
- // Unidoc settings
177
- unidocSourceFilePatterns := Seq (SourceFilePattern (" io/delta/tables/" , " io/delta/exceptions/" )),
178
256
)
179
- .configureUnidoc(generateScalaDoc = true )
257
+ .configureUnidoc(
258
+ generatedJavaDoc = getSparkVersion() == LATEST_RELEASED_SPARK_VERSION ,
259
+ generateScalaDoc = getSparkVersion() == LATEST_RELEASED_SPARK_VERSION
260
+ )
180
261
181
262
lazy val contribs = (project in file(" contribs" ))
182
263
.dependsOn(spark % " compile->compile;test->test;provided->provided" )
@@ -225,7 +306,7 @@ lazy val sharing = (project in file("sharing"))
225
306
releaseSettings,
226
307
Test / javaOptions ++= Seq (" -ea" ),
227
308
libraryDependencies ++= Seq (
228
- " org.apache.spark" %% " spark-sql" % sparkVersion % " provided" ,
309
+ " org.apache.spark" %% " spark-sql" % defaultSparkVersion % " provided" ,
229
310
230
311
" io.delta" %% " delta-sharing-client" % " 1.0.4" ,
231
312
@@ -234,10 +315,10 @@ lazy val sharing = (project in file("sharing"))
234
315
" org.scalatestplus" %% " scalacheck-1-15" % " 3.2.9.0" % " test" ,
235
316
" junit" % " junit" % " 4.12" % " test" ,
236
317
" com.novocode" % " junit-interface" % " 0.11" % " test" ,
237
- " org.apache.spark" %% " spark-catalyst" % sparkVersion % " test" classifier " tests" ,
238
- " org.apache.spark" %% " spark-core" % sparkVersion % " test" classifier " tests" ,
239
- " org.apache.spark" %% " spark-sql" % sparkVersion % " test" classifier " tests" ,
240
- " org.apache.spark" %% " spark-hive" % sparkVersion % " test" classifier " tests" ,
318
+ " org.apache.spark" %% " spark-catalyst" % defaultSparkVersion % " test" classifier " tests" ,
319
+ " org.apache.spark" %% " spark-core" % defaultSparkVersion % " test" classifier " tests" ,
320
+ " org.apache.spark" %% " spark-sql" % defaultSparkVersion % " test" classifier " tests" ,
321
+ " org.apache.spark" %% " spark-hive" % defaultSparkVersion % " test" classifier " tests" ,
241
322
)
242
323
).configureUnidoc()
243
324
@@ -290,10 +371,10 @@ lazy val kernelDefaults = (project in file("kernel/kernel-defaults"))
290
371
" org.openjdk.jmh" % " jmh-core" % " 1.37" % " test" ,
291
372
" org.openjdk.jmh" % " jmh-generator-annprocess" % " 1.37" % " test" ,
292
373
293
- " org.apache.spark" %% " spark-hive" % sparkVersion % " test" classifier " tests" ,
294
- " org.apache.spark" %% " spark-sql" % sparkVersion % " test" classifier " tests" ,
295
- " org.apache.spark" %% " spark-core" % sparkVersion % " test" classifier " tests" ,
296
- " org.apache.spark" %% " spark-catalyst" % sparkVersion % " test" classifier " tests" ,
374
+ " org.apache.spark" %% " spark-hive" % defaultSparkVersion % " test" classifier " tests" ,
375
+ " org.apache.spark" %% " spark-sql" % defaultSparkVersion % " test" classifier " tests" ,
376
+ " org.apache.spark" %% " spark-core" % defaultSparkVersion % " test" classifier " tests" ,
377
+ " org.apache.spark" %% " spark-catalyst" % defaultSparkVersion % " test" classifier " tests" ,
297
378
),
298
379
javaCheckstyleSettings(" kernel/dev/checkstyle.xml" ),
299
380
// Unidoc settings
@@ -346,7 +427,7 @@ lazy val storageS3DynamoDB = (project in file("storage-s3-dynamodb"))
346
427
).configureUnidoc()
347
428
348
429
val icebergSparkRuntimeArtifactName = {
349
- val (expMaj, expMin, _) = getMajorMinorPatch(sparkVersion )
430
+ val (expMaj, expMin, _) = getMajorMinorPatch(defaultSparkVersion )
350
431
s " iceberg-spark-runtime- $expMaj. $expMin"
351
432
}
352
433
@@ -362,7 +443,7 @@ lazy val testDeltaIcebergJar = (project in file("testDeltaIcebergJar"))
362
443
libraryDependencies ++= Seq (
363
444
" org.apache.hadoop" % " hadoop-client" % hadoopVersion,
364
445
" org.scalatest" %% " scalatest" % scalaTestVersion % " test" ,
365
- " org.apache.spark" %% " spark-core" % sparkVersion % " test"
446
+ " org.apache.spark" %% " spark-core" % defaultSparkVersion % " test"
366
447
)
367
448
)
368
449
@@ -496,7 +577,7 @@ lazy val hudi = (project in file("hudi"))
496
577
ExclusionRule (organization = " org.apache.hadoop" ),
497
578
ExclusionRule (organization = " org.apache.zookeeper" ),
498
579
),
499
- " org.apache.spark" %% " spark-avro" % sparkVersion % " test" excludeAll ExclusionRule (organization = " org.apache.hadoop" ),
580
+ " org.apache.spark" %% " spark-avro" % defaultSparkVersion % " test" excludeAll ExclusionRule (organization = " org.apache.hadoop" ),
500
581
" org.apache.parquet" % " parquet-avro" % " 1.12.3" % " compile"
501
582
),
502
583
assembly / assemblyJarName := s " ${name.value}-assembly_ ${scalaBinaryVersion.value}- ${version.value}.jar " ,
@@ -974,10 +1055,10 @@ lazy val compatibility = (project in file("connectors/oss-compatibility-tests"))
974
1055
"io.netty" % "netty-buffer" % "4.1.63.Final" % "test",
975
1056
"org.scalatest" %% "scalatest" % "3.1.0" % "test",
976
1057
"commons-io" % "commons-io" % "2.8.0" % "test",
977
- "org.apache.spark" %% "spark-sql" % sparkVersion % "test",
978
- "org.apache.spark" %% "spark-catalyst" % sparkVersion % "test" classifier "tests",
979
- "org.apache.spark" %% "spark-core" % sparkVersion % "test" classifier "tests",
980
- "org.apache.spark" %% "spark-sql" % sparkVersion % "test" classifier "tests",
1058
+ "org.apache.spark" %% "spark-sql" % defaultSparkVersion % "test",
1059
+ "org.apache.spark" %% "spark-catalyst" % defaultSparkVersion % "test" classifier "tests",
1060
+ "org.apache.spark" %% "spark-core" % defaultSparkVersion % "test" classifier "tests",
1061
+ "org.apache.spark" %% "spark-sql" % defaultSparkVersion % "test" classifier "tests",
981
1062
)
982
1063
)
983
1064
*/
@@ -992,10 +1073,10 @@ lazy val goldenTables = (project in file("connectors/golden-tables"))
992
1073
// Test Dependencies
993
1074
" org.scalatest" %% " scalatest" % scalaTestVersion % " test" ,
994
1075
" commons-io" % " commons-io" % " 2.8.0" % " test" ,
995
- " org.apache.spark" %% " spark-sql" % sparkVersion % " test" ,
996
- " org.apache.spark" %% " spark-catalyst" % sparkVersion % " test" classifier " tests" ,
997
- " org.apache.spark" %% " spark-core" % sparkVersion % " test" classifier " tests" ,
998
- " org.apache.spark" %% " spark-sql" % sparkVersion % " test" classifier " tests"
1076
+ " org.apache.spark" %% " spark-sql" % defaultSparkVersion % " test" ,
1077
+ " org.apache.spark" %% " spark-catalyst" % defaultSparkVersion % " test" classifier " tests" ,
1078
+ " org.apache.spark" %% " spark-core" % defaultSparkVersion % " test" classifier " tests" ,
1079
+ " org.apache.spark" %% " spark-sql" % defaultSparkVersion % " test" classifier " tests"
999
1080
)
1000
1081
)
1001
1082
@@ -1018,13 +1099,13 @@ lazy val sqlDeltaImport = (project in file("connectors/sql-delta-import"))
1018
1099
Test / publishArtifact := false ,
1019
1100
libraryDependencies ++= Seq (
1020
1101
" io.netty" % " netty-buffer" % " 4.1.63.Final" % " test" ,
1021
- " org.apache.spark" % (" spark-sql_" + sqlDeltaImportScalaVersion(scalaBinaryVersion.value)) % sparkVersion % " provided" ,
1102
+ " org.apache.spark" % (" spark-sql_" + sqlDeltaImportScalaVersion(scalaBinaryVersion.value)) % defaultSparkVersion % " provided" ,
1022
1103
" org.rogach" %% " scallop" % " 3.5.1" ,
1023
1104
" org.scalatest" %% " scalatest" % scalaTestVersionForConnectors % " test" ,
1024
1105
" com.h2database" % " h2" % " 1.4.200" % " test" ,
1025
- " org.apache.spark" % (" spark-catalyst_" + sqlDeltaImportScalaVersion(scalaBinaryVersion.value)) % sparkVersion % " test" ,
1026
- " org.apache.spark" % (" spark-core_" + sqlDeltaImportScalaVersion(scalaBinaryVersion.value)) % sparkVersion % " test" ,
1027
- " org.apache.spark" % (" spark-sql_" + sqlDeltaImportScalaVersion(scalaBinaryVersion.value)) % sparkVersion % " test"
1106
+ " org.apache.spark" % (" spark-catalyst_" + sqlDeltaImportScalaVersion(scalaBinaryVersion.value)) % defaultSparkVersion % " test" ,
1107
+ " org.apache.spark" % (" spark-core_" + sqlDeltaImportScalaVersion(scalaBinaryVersion.value)) % defaultSparkVersion % " test" ,
1108
+ " org.apache.spark" % (" spark-sql_" + sqlDeltaImportScalaVersion(scalaBinaryVersion.value)) % defaultSparkVersion % " test"
1028
1109
)
1029
1110
)
1030
1111
0 commit comments