繁体   English   中英

Spark结构化流文件源开始偏移

[英]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“最新”起始偏移量:

  1. 使用带有检查点,虚拟接收器和大量处理时间的option("latestFirst", true)option("maxFilesPerTrigger", "1")运行警告流。 这样,预热流将最新的文件时间戳保存到检查点。

  2. 使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM