Spark 结构化流中的临时视图

Posted

技术标签:

【中文标题】Spark 结构化流中的临时视图【英文标题】:Temporary View in Spark Structure Streaming 【发布时间】:2020-07-03 05:27:08 【问题描述】:

在 ForeachBatch 函数结构化 Straming 中,我想创建 Micro Batch 中接收到的数据帧的临时视图

func(tabdf, epoch_id):
    tabaDf.createOrReplaceView("taba")

但我遇到以下错误:

org.apache.spark.sql.streaming.StreamingQueryException: Table or view not found: taba
Caused by: org.apache.spark.sql.catalyst.analysis.NoSuchTableException: Table or view 'taba' not found

请任何人帮助我解决此问题。

【问题讨论】:

尝试使用'createOrReplaceTempView'功能 我用过同样的,但它不起作用。未在当前 spark 会话中创建视图 【参考方案1】:

流式查询使用自己的 SparkSession,它是从启动查询的 SparkSession 克隆而来。而foreachBatch 提供的DataFrame 是从流式查询的SparkSession 创建的。因此,您无法使用原始 SparkSession 访问临时视图。

一种解决方法是使用createGlobalTempView/createOrReplaceGlobalTempView 创建全局临时视图。请注意,全局临时视图与系统保留的数据库 global_temp 相关联,您需要使用限定名称来引用全局临时,例如 SELECT * FROM global_temp.view1

【讨论】:

以上是关于Spark 结构化流中的临时视图的主要内容,如果未能解决你的问题,请参考以下文章

Spark 结构化流中的外部连接

带有自定义接收器的 Spark 结构化流中的输入行数

如何从 Spark 结构化流中的 Cassandra 等外部存储读取 Kafka 和查询?

有没有办法将生成的 groupby 流加入到 kafka-spark 结构化流中的原始流?

使 Spark 结构化流中的 JSON 可以在 python (pyspark) 中作为没有 RDD 的数据帧访问

如何在 Spark 结构化流中保存通过水印丢弃的记录