Scala 如何同时使用SparkSession和StreamingContext?

Scala 如何同时使用SparkSession和StreamingContext?,scala,apache-spark,spark-dataframe,spark-streaming,Scala,Apache Spark,Spark Dataframe,Spark Streaming,我正在尝试从本地计算机(OSX)上的文件夹中传输CSV文件。我将SparkSession和StreamingContext结合使用,如下所示: val sc: SparkContext = createSparkContext(sparkContextName) val sparkSess = SparkSession.builder().config(sc.getConf).getOrCreate() val ssc = new StreamingContext(sparkSess.spark

我正在尝试从本地计算机(OSX)上的文件夹中传输CSV文件。我将SparkSession和StreamingContext结合使用,如下所示:

val sc: SparkContext = createSparkContext(sparkContextName)
val sparkSess = SparkSession.builder().config(sc.getConf).getOrCreate()
val ssc = new StreamingContext(sparkSess.sparkContext, Seconds(time))

val csvSchema = new StructType().add("field_name",StringType)
val inputDF = sparkSess.readStream.format("org.apache.spark.csv").schema(csvSchema).csv("file:///Users/userName/Documents/Notes/MoreNotes/tmpFolder/")
如果在此之后运行
ssc.start()
,则会出现以下错误:

java.lang.IllegalArgumentException: requirement failed: No output operations registered, so nothing to execute
相反,如果我尝试像这样启动
SparkSession

inputDF.writeStream.format("console").start()
我得到:

java.lang.IllegalStateException: Cannot call methods on a stopped SparkContext.

显然,我不明白
SparkSession
StreamingContext
应该如何协同工作。如果我去掉了
SparkSession
StreamingContext
只有
textFileStream
,我需要在其上施加CSV模式。如果您能澄清如何使此功能正常工作,我们将不胜感激。

您不能同时使用spark会话和spark上下文。随着Spark 2.0.0的发布,开发人员可以使用一个新的抽象—Spark会话—它可以实例化和调用,就像以前可用的Spark上下文一样

您仍然可以从spark会话生成器访问spark上下文:

 val sparkSess = SparkSession.builder().appName("My App").getOrCreate()
 val sc = sparkSess.sparkContext
 val ssc = new StreamingContext(sc, Seconds(time))

导致您的工作失败的另一个原因是您正在执行转换,并且没有调用任何操作。最后应该调用一些操作,例如inputDF.show()

此示例同时使用Spark会话和StreamingContext-为了与现有代码库兼容,我必须使用StreamingContext。Spark会话和Spark上下文不能同时使用。任何spark作业都可以有一个spark上下文和一个spark流上下文。您可以从spark上下文或spark会话创建spark流上下文。我编辑了答案以创建spark流媒体上下文。