Pyspark Streaming - Windows 行为与 Linux 缺失行

Pyspark Streaming - Windows behavior vs Linux missing rows

所以我正在读取一个充满 csv 文件的目录,这些文件是使用 Pyspark readStream() 和 maxFilesPerTrigger=1 按日期排序的。在 Windows 上,它从 earliest 2010-12-01.csv 文件开始,并按顺序向前处理它。我将行附加到控制台并指定水印。 2010-12-01.csv => 2010-12-02.csv => 2010-12-03.csv ...

(Windows)
streaming = spark.readStream.format("csv").schema(staticSchema)\
      .option("maxFilesPerTrigger", 1)\
      .load("D:\data\*.csv")
    
(Linux)
streaming = spark.readStream.format("csv").schema(staticSchema)\
  .option("maxFilesPerTrigger", 1)\
  .load("file:///opt/data/*.csv")

(Same on both)
stream = streaming.selectExpr("car", "cost", "timestamp")\
        .withWatermark("timestamp", "30 seconds")\
        .groupBy(F.col("car"), F.window("timestamp", "1 hour").alias("tmst_window"))\
        .agg(F.sum("cost").alias("agg_cost"))

stream.writeStream.format("console")\
  .queryName("customer_purchases")\
  .option('truncate', False)\
  .outputMode("append").start()

现在,当我 运行 在 Linux 上使用完全相同的代码时,它会从 csv 文件集中随机读取,而不是像 Windows 那样从头开始。我在 Linux 上遇到的一个问题是,它在前几分钟内读取了最后一个文件(2011-12-10.csv,+1 年差异),然后停止处理其余文件文件。它认为它完成了,可能是因为其余文件“落后于”它使用水印处理的文件日期并停止了。在 Windows 上,我得到了数千行,在 Linux 上,我只得到了 41 行。 Windows 和 Linux 上连续 运行 的行为保持不变。有人知道为什么存在这种行为吗?

两者都是独立实例:

Linux:PySpark 版本 2.4.0.16(datastax docker 图片)

Windows: spark-3.1.1-bin-hadoop3.2

只是想关闭它以防万一有人遇到同样的问题。我在 Databricks 云上重新创建了数据集,并使用了另一个 docker 纯粹只安装了 Pyspark 的图像。以上两个都给了我与 Windows Pyspark 行为相同的结果。所以四个中的三个工作正常。话虽如此,我会远离 Datastax DSE docker 图像,因为它无法正常工作。使用自己的专有文件系统的 Datastax 图像可能存在问题。