簡體   English   中英

在同一JVM中檢測到多個SparkContext

[英]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)

數字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

您應該在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM