Wenn ich Spark Submit ausführe, erhalte ich den folgenden Fehler:
Ausnahme im Thread „main“ org.apache.spark.sql.AnalysisException: Datenquelle konnte nicht gefunden werden: avro. Avro ist seit Spark 2.4 ein integriertes, aber externes Datenquellenmodul. Bitte stellen Sie die Anwendung gemäß dem Bereitstellungsabschnitt des „Apache Avro Data Source Guide“ bereit.
aber in der IDE funktioniert alles einwandfrei.
jar wird erstellt mitSBT-Montage.
build.sbtsieht aus wie das:
val sparkVersion = "2.4.3"
val jacksonVersion = "2.8.7"
dependencyOverrides ++= Seq(
"com.fasterxml.jackson.core" % "jackson-core" % jacksonVersion,
"com.fasterxml.jackson.core" % "jackson-databind" % jacksonVersion,
"com.fasterxml.jackson.module" %% "jackson-module-scala" % jacksonVersion
)
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % sparkVersion % "provided" ,
"org.apache.spark" %% "spark-sql" % sparkVersion % "provided",
"org.apache.spark" %% "spark-hive" % sparkVersion % "provided",
"org.apache.spark" %% "spark-avro" % "2.4.3",
"io.confluent" % "kafka-avro-serializer" % "5.0.1",
"org.apache.avro" % "avro" % "1.8.2"
)
assemblyMergeStrategy in assembly := {
case PathList("META-INF", xs@_*) => MergeStrategy.discard
case x => MergeStrategy.first
}
Ich habe es versucht mitscalaVersion2.11.12 und 2.12.8
der Job sieht folgendermaßen aus:
Seq(1, 2, 3).toDF("id")
.write
.format("avro")
.mode(SaveMode.Overwrite)
.save("testavro")
Antwort1
Sie müssen diese Abhängigkeit entfernen:
"org.apache.avro" % "avro" % "1.8.2"