DataFrame and SQL Operations部分中的官方Spark Streaming Programming Guide提到了异步运行SQL查询:
您还可以对来自不同线程的流数据上定义的表运行SQL查询(即,与正在运行的StreamingContext异步)。
是否有任何示例/示例显示如何操作?
答案 0 :(得分:2)
文档必须提及它真的很有趣,因为任何使用相同SparkSession
的线程都可以访问任何临时表。
我会这样做:
// Create a fixed thread pool to execute asynchronous tasks
val executorService = Executors.newFixedThreadPool(1)
dstream.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")
// Submit a asynchronous task to execute a SQL query
executorService.submit {
new Runnable {
override def run(): Unit = {
sql("select * from records").show(truncate = false)
}
}
}
}