[英]Spark Structured Streaming File Source Starting Offset
有没有一种方法可以指定Spark结构化文件流源的起始偏移量?
我正在尝试从HDFS流式传输实木复合地板:
spark.sql("SET spark.sql.streaming.schemaInference=true")
spark.readStream
.parquet("/tmp/streaming/")
.writeStream
.option("checkpointLocation", "/tmp/streaming-test/checkpoint")
.format("parquet")
.option("path", "/tmp/parquet-sink")
.trigger(Trigger.ProcessingTime(1.minutes))
.start()
如我所见,第一个运行是处理路径中检测到的所有可用文件,然后将偏移量保存到检查点位置并仅处理新文件,即接受期限并且在所看到的文件中不存在映射。
我正在寻找一种方法,如何指定起始偏移量或时间戳或选项数量,以在首次运行时不处理所有可用文件。
我有找的方法吗?
感谢@jayfah,据我所知,我们可以使用以下技巧来模拟Kafka“最新”起始偏移量:
使用带有检查点,虚拟接收器和大量处理时间的option("latestFirst", true)
和option("maxFilesPerTrigger", "1")
运行警告流。 这样,预热流将最新的文件时间戳保存到检查点。
使用option("maxFileAge", "0")
和真实接收器运行真实流,使用相同的检查点位置。 在这种情况下,流将仅处理新近可用的文件。
很有可能这对于生产不是必需的,并且有更好的方法,例如重组数据路径等,但是至少我以此方式找到了我的问题的答案。
FileStreamSource
没有选择指定起始偏移量的选项。
但是您可以将latestFirst
选项设置为true
以确保它首先处理最新文件(默认情况下此选项为false)
https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#input-sources
spark.readStream
.option("latestFirst", true)
.parquet("/tmp/streaming/")
.writeStream
.option("checkpointLocation", "/tmp/streaming-test/checkpoint")
.format("parquet")
.option("path", "/tmp/parquet-sink")
.trigger(Trigger.ProcessingTime(1.minutes))
.start()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.