在同一JVM中检测到多个SparkContext

根据我的上一个问题,我必须为我独特的JVM定义Multiple 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 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.(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.(SparkContext.scala:2023) at org.apache.spark.api.java.JavaSparkContext.(JavaSparkContext.scala:61) at test.MLlib.BinarryClassification.main(BinaryClassification.java:105) 

数字41105是行,其中两个对象都是用Java代码定义的。 我的问题是,如果我已经使用set -method,是否可以在同一个JVM上执行多个SparkContext以及如何执行它?

您确定需要将JavaSparkContext作为单独的上下文吗? 你提到的上一个问题并没有这么说。 如果您已有Spark Context,则可以从中创建新的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正在运行,所以你必须停止这个上下文:sc.stop然后你可以继续没有任何pb