スパークジョブでは、方法SparkContext.addJar()
で共有されているjarをインポートして使用する方法がわかりません。この方法では、クラスタ内の他のノードからアクセスできる場所にジャーを移動することができますが、インポート方法はわかりません。私はaddNumberというクラスを作成し、jarファイルutils.jar
にそれを作るSparkでメソッドaddJar()を使用するとは何ですか?
package utils;
public class addNumber {
public int addOne(int i){
return i + 1;
}
public int addTwo(int i){
return i + 2;
}
}
:
これは一例です。
は、それから私は、スパークジョブを作成し、コードは以下の通りである:
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
object TestDependencies {
def main(args:Array[String]): Unit = {
val sparkConf = new SparkConf
val sc = new SparkContext(sparkConf)
sc.addJar("/path/to//utils.jar")
val data = 1 to 100 toList
val rdd = sc.makeRDD(data)
val rdd_1 = rdd.map (x => {
val handler = new utils.addNumber
handler.addOne(x)
})
rdd_1.collect().foreach { x => print(x + "||") }
}
}
エラー「java.lang.NoClassDefFoundErrorが:utilsの/ addNumber」コマンド"spark-submit"
てジョブの投入後に発生します。
私はその方法を知っていますaddJar()
はスパークジョブのクラスパスに含まれるジャーを保証しません。 jarファイルを使用したい場合、私はすべての依存関係をクラスタの各ノードの同じパスに移動します。しかし、私が移動してすべての瓶を含めることができれば、方法addJar()
の使用は何ですか?
方法でインポートされたjarを使用する方法があるかどうかは疑問です。前もって感謝します。
ハイテクする@ mariusz051、私は地元の追加しようとしました。ログから、sparkが私のjarをコピーしてクラスローダーに追加しましたが、このクラスはexecutorにはまだ見つかりません。 – Frankie
addJarはそれをマスターJVMのクラスパスに追加しません。これらのクラスは既に存在しているとみなし、JARを追加してワーカーノードに送信します。 –
@NayanSharma私は自分の答えを編集しました –