![](/img/trans.png)
[英]Multiple running SparkContexts detected in the same JVM - Java Spark
[英]Multiple SparkContext detected in the same JVM
根據我的上一個問題,我必須為我獨特的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<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代碼定義的。 我的問題是,如果我已經使用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
您應該在SparkSession
上使用builder
方法,而不是使用SparkContext
,它更加粗略地實例化spark和SQL上下文,並確保不存在上下文沖突。
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder().appName("demo").getOrCreate()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.