我正在尝试将处理后的数据写入HDFS位置。经过长时间的尝试和错误方法后,我将数据写入HDFS位置,但是现在的问题是,每当我向目录中添加新文件(指向readStream)时,旧文件就会在HDFS位置进行处理和更新>
让我说我已经开始流式传输并且我在目录中添加了file-1.csv ...什么都没有写到HDFS位置..然后我添加了file-2.csv ..仍然没有将其写入HDFS ,接下来我添加了file-3.csv ..这一次,file-1.csv的已处理文件正在写入HDFS ...
File 1 - no prcess
File 2 - no process
File 3 - process and written file 1 data to HDFS
file4 - process and written file 2 data to HDFS
即使是结构化流,也不确定为什么会发生
有人可以解决这个问题吗?
我的输出命令如下:
FetRepo
.writeStream
.outputMode("append")
.partitionBy("data_dt")
.format("csv")
.trigger(Trigger.ProcessingTime("10 seconds"))
.option("path", "hdfs://ffff/apps/hive/warehouse/area.db/fin_repo/")
.start
答案 0 :(得分:0)
问自己“我多久添加一次文件?”以及这有什么关系
Trigger.ProcessingTime("10 seconds")
?使用该配置,您不应期望10秒之内会发生任何事情。
要查看的另一件事是,您使用outputMode("append")
仅输出自上次触发以来添加的聚合(组)的行。
附加模式-仅自上次触发以来在结果表中附加的新行将被写入外部存储。
请注意(引用相同的文档):“这仅适用于预期结果表中现有行不会更改的查询。”