Apache spark Spark结构化流媒体-更新数据帧';s的动态模式

Apache spark Spark结构化流媒体-更新数据帧';s的动态模式,apache-spark,apache-spark-sql,schema,spark-structured-streaming,Apache Spark,Apache Spark Sql,Schema,Spark Structured Streaming,我有一个简单的结构化流媒体工作,它监视CSV文件的目录,并写入拼花地板文件-两者之间没有转换 该作业首先通过使用readStream()读取CSV文件来构建一个数据帧,其中包含一个模式,我通过调用名为buildSchema()的函数来获取该模式。代码如下: var-df=spark .readStream .选项(“sep”和“|”) .选项(“标题”、“正确”) .schema(buildSchema(spark,table_name).get)//buildSchema()为我获取模式 .c

我有一个简单的结构化流媒体工作,它监视CSV文件的目录,并写入拼花地板文件-两者之间没有转换

该作业首先通过使用
readStream()
读取CSV文件来构建一个数据帧,其中包含一个模式,我通过调用名为
buildSchema()
的函数来获取该模式。代码如下:

var-df=spark
.readStream
.选项(“sep”和“|”)
.选项(“标题”、“正确”)
.schema(buildSchema(spark,table_name).get)//buildSchema()为我获取模式
.csv(输入\基本\目录+表格\名称+“*”)
logger.info(“新批次指示器”)
if(df.schema!=buildSchema(spark,table_name).get){
df=spark.sqlContext.createDataFrame(df.collectAsList(),buildSchema(spark,table_name).get)
}
val查询=
df.writeStream
.格式(“拼花地板”)
.queryName(“convertCSVtoPqrquet for table”+table_name)
.选项(“路径”,输出\基本\目录+表\名称+“/”)
.触发器(处理时间(60秒))
.start()
这项工作运行良好,但我的问题是,我希望始终使用最新的模式来构建数据框架,或者换句话说,从CSV文件中读取数据。虽然
buildSchema()
可以为我获取最新的模式,但我不确定如何定期调用它(或每个CSV文件调用一次),然后使用最新的模式以某种方式重新生成或修改数据帧

测试时,我观察到只有
query
对象在一批又一批连续运行;我放置的log语句和用于模式比较的
if()
语句只在应用程序开始时发生一次

调用
query.start()
后,是否可以修改结构化流作业中的数据帧架构?如果我们不能更改数据帧的模式,您会建议什么好的解决方法


提前感谢。

如果您在输入端很灵活,您应该查看avro、avro schema registry和kafka streams