web-dev-qa-db-ja.com

同じJVMで複数のSparkContextが検出されました

私の 最後の質問によると 私は私の固有のJVMに複数のSparkContextを定義する必要があります。

私は次の方法でそれを行いました(Javaを使用):

SparkConf conf = new SparkConf();
conf.setAppName("Spark MultipleContest Test");
conf.set("spark.driver.allowMultipleContexts", "true");
conf.setMaster("local");

その後、次のソースコードを作成します。

SparkContext sc = new SparkContext(conf);
SQLContext sqlContext = new org.Apache.spark.sql.SQLContext(sc);

そして後でコード:

JavaSparkContext ctx = new JavaSparkContext(conf);
JavaRDD<Row> testRDD = ctx.parallelize(AllList);

コードの実行後、次のエラーメッセージが表示されました。

16/01/19 15:21:08 WARN SparkContext: Multiple running SparkContexts detected in the same JVM!
org.Apache.spark.SparkException: Only one SparkContext may be running in this JVM (see SPARK-2243). To ignore this error, set spark.driver.allowMultipleContexts = true. The currently running SparkContext was created at:
org.Apache.spark.SparkContext.<init>(SparkContext.scala:81)
test.MLlib.BinarryClassification.main(BinaryClassification.Java:41)
    at org.Apache.spark.SparkContext$$anonfun$assertNoOtherContextIsRunning$1.apply(SparkContext.scala:2083)
    at org.Apache.spark.SparkContext$$anonfun$assertNoOtherContextIsRunning$1.apply(SparkContext.scala:2065)
    at scala.Option.foreach(Option.scala:236)
    at org.Apache.spark.SparkContext$.assertNoOtherContextIsRunning(SparkContext.scala:2065)
    at org.Apache.spark.SparkContext$.setActiveContext(SparkContext.scala:2151)
    at org.Apache.spark.SparkContext.<init>(SparkContext.scala:2023)
    at org.Apache.spark.api.Java.JavaSparkContext.<init>(JavaSparkContext.scala:61)
    at test.MLlib.BinarryClassification.main(BinaryClassification.Java:105)

数字41および105は、両方のオブジェクトがJavaコードで定義されている行です。私の質問は、同じJVMで複数のSparkContextを実行すること、およびその方法set- method?

9
Guforu

別のコンテキストとしてJavaSparkContextが必要ですか?あなたが参照する前の質問はそうではありません。すでにSparkコンテキストがある場合は、別のコンテキストを作成するのではなく、そこから新しいJavaSparkContextを作成できます。

SparkConf conf = new SparkConf();
conf.setAppName("Spark MultipleContest Test");
conf.set("spark.driver.allowMultipleContexts", "true");
conf.setMaster("local");

SparkContext sc = new SparkContext(conf);
SQLContext sqlContext = new org.Apache.spark.sql.SQLContext(sc);

//Create a Java Context which is the same as the scala one under the hood
JavaSparkContext.fromSparkContext(sc)
13
mattinbits

sparkContextはデフォルトで実行されているため、このコンテキストを停止する必要があります:sc.stopその後、pbなしで続行できます

5
Khaled Sorino

SparkContextを使用する代わりに、builderSparkSessionメソッドを使用する必要があります。これにより、sparkおよびSQLコンテキストがより確実にインスタンス化され、コンテキストの競合。

import org.Apache.spark.sql.SparkSession
val spark = SparkSession.builder().appName("demo").getOrCreate()
0
Gaurang Shah