线程 "main" org.apache.spark.SparkException 中的异常:此 JVM 中只有一个 SparkContext 可能是 运行(请参阅 SPARK-2243)

Exception in thread "main" org.apache.spark.SparkException: Only one SparkContext may be running in this JVM (see SPARK-2243)

我在尝试 运行 使用 cassandra 的 spark 应用程序时遇到错误。

Exception in thread "main" org.apache.spark.SparkException: Only one SparkContext may be running in this JVM (see SPARK-2243). 

我正在使用 spark 1.2.0 版,很明显我在我的应用程序中只使用了一个 spark 上下文。但是每当我尝试添加以下代码用于流式传输时,我都会收到此错误。

JavaStreamingContext activitySummaryScheduler = new JavaStreamingContext(
            sparkConf, new Duration(1000));

您一次只能有一个 SparkContext,并且由于 StreamingContext 中有一个 SparkContext,您不能在同一代码中有单独的 Streaming 和 Spark Context。您可以做的是从您的 SparkContext 构建一个 StreamingContext,这样您就可以在确实需要时访问两者。

使用这个构造函数 JavaStreamingContext(sparkContext: JavaSparkContext, batchDuration: Duration)

在这里查看第二个代码片段 enter link description here

你的代码应该是这样的

import org.apache.spark.streaming.api.java.*;

JavaSparkContext existingSparkContext = ...   //existing JavaSparkContext
JavaStreamingContext activitySummaryScheduler = new JavaStreamingContext(existingSparkContext, Durations.seconds(1000));

一种方法如下:

    SparkConf sparkConf = new SparkConf().setAppName("Example Spark App").setMaster("local[*]");
    JavaSparkContext jssc = new JavaSparkContext(sparkConf);
    JavaStreamingContext jsc = new JavaStreamingContext(jssc, new Duration(1));