概述
Spark结构化流不支持将流查询的结果写入配置单元表。
scala> println(spark.version)
2.4.0
val sq = spark.readStream.format("rate").load
scala> :type sq
org.apache.spark.sql.DataFrame
scala> assert(sq.isStreaming)
scala> sq.writeStream.format("hive").start
org.apache.spark.sql.AnalysisException: Hive data source can only be used with tables, you can not write files of Hive data source directly.;
at org.apache.spark.sql.streaming.DataStreamWriter.start(DataStreamWriter.scala:246)
... 49 elided
如果不支持目标系统(aka sink),则可以使用foreach和foreachbatch操作(突出显示mine):
foreach和foreachbatch操作允许您对流式查询的输出应用任意操作和写入逻辑。它们有稍微不同的用例——虽然foreach允许在每一行上自定义写入逻辑,但是foreach batch允许在每个微批的输出上执行任意操作和自定义逻辑。
我认为foreachbatch是你最好的选择。
import org.apache.spark.sql.DataFrame
sq.writeStream.foreachBatch { case (ds: DataFrame, batchId: Long) =>
// do whatever you want with your input DataFrame
// incl. writing to Hive
// I simply decided to print out the rows to the console
ds.show
}.start
还有一个ApacheHiveWarehouse join器,我从未使用过,但它似乎有一些帮助。
最后
以上就是孤独枕头为你收集整理的spark写表指定外部表_如何将Spark结构化流式 DataFrame 插入Hive外部表/位置?的全部内容,希望文章能够帮你解决spark写表指定外部表_如何将Spark结构化流式 DataFrame 插入Hive外部表/位置?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复