Несколько SparkContext, обнаруженных в одном JVM

по моему последний вопрос Я должен определить множественный SparkContext для моей уникальной JVM.

Я сделал это следующим образом (используя 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.apply(SparkContext.scala:2083)
    at org.apache.spark.SparkContext$$anonfun$assertNoOtherContextIsRunning.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. Мой вопрос в том, можно ли выполнить несколько SparkContext на одном JVM и как это сделать, если я уже использую set-способ ?

2 ответов


вы уверены, что вам нужен 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)

SparkContext работает по умолчанию, поэтому вы должны остановить этот контекст: Южная Каролина.остановка тогда вы можете продолжить без каких-либо pb