簡體   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