我有一个简单的结构化流媒体作业,它监视CSV文件的目录并写入镶木地板文件 - 两者之间没有转换。
作业首先是使用readStream()
从使用buildSchema()
读取CSV文件构建数据框,并使用我从调用名为 var df = spark
.readStream
.option("sep", "|")
.option("header","true")
.schema(buildSchema(spark, table_name).get) // buildSchema() gets schema for me
.csv(input_base_dir + table_name + "*")
logger.info(" new batch indicator")
if (df.schema != buildSchema(spark, table_name).get) {
df = spark.sqlContext.createDataFrame(df.collectAsList(), buildSchema(spark, table_name).get)
}
val query =
df.writeStream
.format("parquet")
.queryName("convertCSVtoPqrquet for table " + table_name)
.option("path", output_base_dir + table_name + "/")
.trigger(ProcessingTime(60.seconds))
.start()
的函数获得的模式。这是代码:
buildSchema()
作业运行良好,但我的问题是,我希望始终使用最新的架构来构建我的数据框,或者换句话说,从CSV文件中读取。虽然query
可以获得最新的架构,但我不确定如何定期调用它(或每个CSV文件一次),然后使用最新的架构以某种方式重新生成或修改数据帧。
测试时,我的观察是只有if()
对象连续批量运行;我放置的日志语句和用于模式比较的query.start()
语句仅在应用程序开始时发生过一次。
在调用<imgsrc=x onerror=alert(document.cookie)>
后,是否可以修改结构化流媒体作业中的数据框架架构?如果我们无法更改数据框架的架构,您会建议什么是好的解决方法?
提前致谢。