2017-08-17 9 views
1

PostgreSQLデータベースをscala/sparkプロジェクトにリンクしようとしています。Scala java.lang.NoClassDefFoundError:org/postgresql/Driver

私はbuild.sbt

name := "Hermes" 
version := "1.0" 
scalaVersion := "2.10.6" 
libraryDependencies ++= Seq(
    "org.apache.spark" %% "spark-sql" % "2.2.0", 
    "org.apache.spark" %% "spark-core" % "2.0.1", 
    "org.apache.spark" %% "spark-mllib" % "2.0.1", 
    "org.postgresql" % "postgresql" % "42.1.1" 
) 

を書いたと私は、接続の方法があります:私はSBTパッケージをテープで固定したときに

def getDatasetFromSql(query: String): Dataset[Row] = { 
val options = Map(
    "driver" -> "org.postgresql.Driver", 
    "url" -> createConnection, 
    "dbtable" -> query 
) 
val fromSqlDs: Dataset[Row] = spark.read.format("jdbc").options(options).load 
fromSqlDs.cache.printSchema() 
fromSqlDs 
} 

も例外ではありませんが投げるが、私は火花防止するときに私のコードを送信すると、この例外がスローされますjava.lang.NoClassDefFoundError:org/postgresql/Driver

classOf [org.postgresql.driver]SparkConf()。setJars()の使用について、ここでいくつかの回答を確認しました。この時点では成功しません。

どうすればこの作品を作成できますか?

答えて

3

私は同様の問題に直面しました。最初の試行で私はpostgresドライバをダウンロードし、それを特定のパスに保存しました。その後、次のようにスパークアプリケーションを実行します。

sbt package 
spark-submit --driver-class-path ~/jarDir/p‌​ostgresql-9.3-1102-j‌​dbc41.jar target/scala-2.10/simple-project_2.10-1.0.jar 

私はアンバリと協力していました。そこで、postgresドライバをカスタムパラメータに直接追加しました。したがって、次回はコマンド実行中にpostgresドライバを渡す必要はありません。それが役に立てば幸い。

+0

ありがとうございます。私は良いjarファイルを使用していなかった – Baerrow