繁体   English   中英

PySpark 结构化流:一旦不与 Kafka 一起使用就触发

[英]PySpark Structured Streaming: trigger once not working with Kafka

我想在一小时内分批从 Kafka 集群中提取流数据,所以我每小时运行一个脚本,将 writeStream 设置为.trigger(once=True)并将startingOffsets设置为earliest ,如下所示:

df = spark.readStream \
    .format("kafka") \
    .option("kafka.bootstrap.servers", 
        config.get("kafka_servers")) \
    .option("subscribe", config.get("topic_list")) \
    .option("startingOffsets", "earliest") \
    .load()

df.writeStream \
    .format("parquet") \
    .option("checkpointLocation", config.get("checkpoint_path")) \
    .option("path", config.get("s3_path_raw")) \
    .trigger(once=True) 
    .partitionBy('date', 'hour') \
    .start()

但是每次脚本被触发时,它只会将那一刻来自 Kafka 集群的消息写入 S3,而不是像我期望的那样获取最后一小时的所有消息。

可能是什么问题?

编辑:我应该提一下,kafka 集群保留设置为 24 小时

选项1:

.trigger(once=True)应该只处理一块数据。

请尝试将其替换为.trigger(availableNow=True)

选项 2:

以 1 小时的处理间隔启动并运行作业; .trigger(processingTime='60 minutes')

此外,您在阅读 stream 时需要设置以下选项

.option("failOnDataLoss", "false")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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