我似乎无法使用 Spark 作业中的 Delta 格式进行编写,但我不确定我错过了什么。我正在使用 Spark 3.5.3 和 Deltalake 3.2.0。
我的错误:
Exception in thread "main" org.apache.spark.SparkClassNotFoundException: [DATA_SOURCE_NOT_FOUND] Failed to find the data source: delta. Please find packages at `https://spark.apache.org/third-party-projects.html`.
我的build.sbt:
name := "test"
version := "0.1"
scalaVersion := "2.12.18"
logLevel := Level.Warn
assembly / logLevel := Level.Warn
clean / logLevel := Level.Warn
libraryDependencies += "org.apache.spark" %% "spark-core" % "3.5.3" % "provided"
libraryDependencies += "org.apache.spark" %% "spark-sql" % "3.5.3" % "provided"
libraryDependencies += "io.delta" %% "delta-spark" % "3.2.0"
assembly / test := {}
assemblyJarName := s"${name.value}-${version.value}.jar"
assemblyMergeStrategy in assembly := {
case PathList("META-INF", _*) => MergeStrategy.discard
case _ => MergeStrategy.first
}
还有我的工作:
val spark = SparkSession
.builder()
.appName("test")
.config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension")
.config(
"spark.sql.catalog.spark_catalog",
"org.apache.spark.sql.delta.catalog.DeltaCatalog"
)
.getOrCreate()
val df = getData(spark)
val path = "/home/user/testtable"
df.write.format("delta").mode("overwrite").save(path)
spark.stop()
有什么想法吗?我正在查看 Delta Lake 快速入门,但我没有看到任何遗漏的内容。我觉得有一些明显的事情。
你如何运行你的代码?
以防万一,如果您使用
sbt assembly
准备胖罐,然后通过 spark-submit
提交,请不要忘记
--packages io.delta:delta-spark_2.12:3.2.0
。
.config("spark.jars.packages", "io.delta:delta-spark_2.12:3.2.0")
不起作用。 libraryDependencies += "io.delta" %% "delta-spark" % "3.2.0"
中的build.sbt
也不够。
/path_to_project/target/scala-2.12$ /path_to_spark/bin/spark-submit --packages io.delta:delta-spark_2.12:3.2.0 test-0.1.jar