使用 scalaspark 创建增量表时出现以下错误。 _delta_log 正在仓库中创建,但在 _delta_log 创建后出现此错误
线程“main”中的异常 java.lang.ClassCastException:类 org.apache.hadoop.fs.RawLocalFileSystem$DeprecatedRawLocalFileStatus 无法转换为类 org.apache.spark.sql.execution.datasources.FileStatusWithMetadata (org.apache.hadoop. fs.RawLocalFileSystem$DeprecatedRawLocalFileStatus 和 org.apache.spark.sql.execution.datasources.FileStatusWithMetadata 位于加载程序“app”的未命名模块中)
构建.sbt
//Using JDK 20
import sbt.project
ThisBuild / version := "0.1.0-SNAPSHOT"
ThisBuild / scalaVersion := "2.12.4"
lazy val root = (project in file("."))
.settings(
name := "scala-spark-app2",
idePackagePrefix := Some("com.scalaspark.app2"),
)
libraryDependencies += "org.apache.spark" %% "spark-core" % "3.5.0"
libraryDependencies += "org.apache.spark" %% "spark-sql" % "3.5.0"
libraryDependencies += "io.delta" %% "delta-core" % "2.4.0"
主.scala
package com.scalaspark.app2
import org.apache.spark.sql.{Row, SparkSession}
object Main {
def main(args: Array[String]): Unit = {
val warehouseDir = "/Users/usr1/app2/scala-spark-app2/data_files/"
val spark = SparkSession.builder()
.appName("DeltaTableDetails")
.config("spark.master", "local")
.config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension")
.config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog")
.config("spark.sql.warehouse.dir", warehouseDir)
.getOrCreate()
var query = "CREATE TABLE IF NOT EXISTS T1 (id bigint, data string) USING delta LOCATION '/Users/usr1/scala-spark-app2/data_files/T1'"
spark.sql(query)
query = "INSERT INTO T1 VALUES(10,'VAL1')"
spark.sql(query)
}
}
尝试更改 scala 、spark 和 delta 的版本,但没有成功。使用 JDK 20 版本。
所以目前支持的最高 Java 版本是 Java 17。请确保使用此版本。
我个人使用 Spark:3.5.1,它只适用于 delta-spark:3.1.0,我在 delta-core:2.4.0 中遇到了类似的错误。
信息:自 3.0.0 版本起,delta-core 已重命名为 delta-spark。
以下是我使用和正在运行的版本:
希望有帮助。