写入 Delta 表 Spark 3.5.3 Delta Lake 3.2.0

问题描述 投票:0回答:1

我似乎无法使用 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 快速入门,但我没有看到任何遗漏的内容。我觉得有一些明显的事情。

scala apache-spark parquet distributed-computing delta-lake
1个回答
0
投票

你如何运行你的代码?

以防万一,如果您使用

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
© www.soinside.com 2019 - 2024. All rights reserved.