Scala spark streaming-在一个流中创建tmp视图,并在另一个流中使用

Scala spark streaming-在一个流中创建tmp视图,并在另一个流中使用,scala,apache-spark,spark-streaming,spark-dataframe,Scala,Apache Spark,Spark Streaming,Spark Dataframe,我尝试运行2个数据流,在第一个数据流中生成Dataframe,将df注册为tmp视图,然后在另一个数据流中使用它,如下所示: dstream1.foreachRDD { rdd => import org.apache.spark.sql._ val spark = SparkSession.builder.config(rdd.sparkContext.getConf).getOrCreate import spark.implicits._ import spark.s

我尝试运行2个数据流,在第一个数据流中生成Dataframe,将df注册为tmp视图,然后在另一个数据流中使用它,如下所示:

dstream1.foreachRDD { rdd =>
  import org.apache.spark.sql._
  val spark = SparkSession.builder.config(rdd.sparkContext.getConf).getOrCreate
  import spark.implicits._
  import spark.sql

  val records = rdd.toDF("record")
  records.createOrReplaceTempView("records")
}
dstream2.foreachRDD { rdd =>
  import org.apache.spark.sql._
  val spark = SparkSession.builder.config(rdd.sparkContext.getConf).getOrCreate
  import spark.implicits._
  import spark.sql

  val records2 = rdd.toDF("record2")
  val oldRecord = spark.table("records")
  records2.join(oldRecod).write.json(...)
}
streamingContext.remember(Seconds(60))
    streamingContext.start()
    streamingContext.awaitTermination()
我不断得到一个
org.apache.spark.sql.catalyst.analysis.NoSuchTableException
所以很明显我做的不对

有没有办法做到这一点

谢谢

这确实奏效了, 问题是,当在本地测试时,您需要留下额外的核心进行计算,然后从流中获取数据

我使用master=local[2],因此每个核心都用于处理每个流,而非left则用于执行其他任何操作。 一旦我把它改为master=local[4],它就工作得很好