Parece que não consigo escrever usando o formato delta do meu trabalho spark, mas não tenho certeza do que estou perdendo. Estou usando spark 3.5.3 e deltalake 3.2.0.
Meu erro:
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`.
Minha construção.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
}
e meu trabalho:
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()
Alguma ideia? Estou olhando para o delta lake quickstart, mas não estou vendo nada que esteja faltando. Sinto que há algo óbvio, no entanto.
Como você executa seu código?
Só por precaução, se você preparar um pote de gordura
sbt assembly
e depois enviá- lo via,spark-submit
não se esqueça--packages io.delta:delta-spark_2.12:3.2.0
..config("spark.jars.packages", "io.delta:delta-spark_2.12:3.2.0")
não funciona.libraryDependencies += "io.delta" %% "delta-spark" % "3.2.0"
inbuild.sbt
também não é suficiente.Tentar