![](/img/trans.png)
[英]IntelliJ: Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/spark/sql/types/DataType
[英]How to fix this scala jar error “Exception in thread ”main“ java.lang.NoClassDefFoundError: org/apache/spark/sql/types/DataType”
當在智能中運行時,scala spark對象運行良好。 但是在構建工件並以jar執行后,我在下面收到此錯誤。
線程“主”中的異常java.lang.NoClassDefFoundError:org / apache / spark / sql / types / DataType
如何解決這個問題? 感謝您對此的投入。
IntelliJ IDEA :
“文件”>“項目結構”>“項目設置”>“工件”> +>“ Jar”>具有依賴項的模塊生成的jar文件選中“包括在項目構建中”復選框應用>確定Tab:Build> Build Artifacts> poc:jar> Build
build.sbt
name := "poc"
version := "0.1"
scalaVersion := "2.11.12"
libraryDependencies ++= Seq(
"org.apache.spark" % "spark-core_2.11" % "2.4.3",
"org.apache.spark" % "spark-sql_2.11" % "2.4.3",
"com.datastax.spark" % "spark-cassandra-connector_2.11" % "2.4.1",
"org.apache.hadoop" % "hadoop-aws" % "2.7.1"
)
poc.scala
import org.apache.spark.sql.types.{ IntegerType, StringType, StructField, StructType}
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.SparkSession
object dataload {
def main(args: Array[String]): Unit =
{
val awsAccessKeyId: String = args(0)
val awsSecretAccessKey: String = args(1)
val csvFilePath: String = args(2)
val host: String = args(3)
val username: String = args(4)
val password: String = args(5)
val keyspace: String = args(6)
println("length args: " + args.length)
val Conf = new SparkConf().setAppName("Imp_DataMigration").setMaster("local[2]")
.set("fs.s3n.awsAccessKeyId", awsAccessKeyId)
.set("fs.s3n.awsSecretAccessKey", awsSecretAccessKey)
.set("fs.s3n.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
.set("spark.cassandra.connection.host", host)
.set("spark.cassandra.connection.port","9042")
.set("spark.cassandra.auth.username", username)
.set("spark.cassandra.auth.password", password)
val sc = new SparkContext(Conf)
val spark = SparkSession.builder.config(sc.getConf).getOrCreate()
val schemaHdr = StructType(
StructField("a2z_name", StringType) ::
StructField("a2z_key", StringType) ::
StructField("a2z_id", IntegerType) :: Nil
)
val df = spark.read.format( source = "csv")
.option("header", "true")
.option("delimiter", "\t")
.option("quote", "\"")
.schema(schemaHdr)
.load( path = "s3n://at-spring/a2z.csv")
println(df.count())
df.write
.format( source = "org.apache.spark.sql.cassandra")
.option("keyspace","poc_sparkjob")
.option("table","a2z")
.mode(org.apache.spark.sql.SaveMode.Append)
.save
sc.stop()
}
}
Spark應用程序通常通過spark-submit腳本提交 。 可以使用java -jar ...
提交作業,但是處理類路徑問題的時間要困難得多,因為您現在正在體驗。
相關地,您將需要將Spark / Hadoop依賴項標記為“已提供”,例如"org.apache.spark" % "spark-core_2.11" % "2.4.3" % "provided"
,因為spark-submit
將找到並從本地安裝將必要的.jar文件添加到類路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.