pyspark流媒体-windows行为与linux缺行

ojsjcaue  于 2021-07-09  发布在  Spark
关注(0)|答案(1)|浏览(385)

因此,我正在读取一个目录,其中充满了csv文件,这些文件使用maxfilespertrigger=1的pyspark readstream()按日期排序。在windows上,它从最早的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年diff),然后停止处理其余的文件。它认为它完成了,可能是因为其余的文件“落后于”它用水印处理的文件日期并停止了。在windows上,我得到数千行,在linux上,我只得到41行。在windows和linux上连续运行时,行为保持不变。有人知道为什么会有这种行为吗?
两者都是独立示例:
linux:pyspark版本2.4.0.16(datastax docker映像)
窗口:spark-3.1.1-bin-hadoop3.2

jobtbby3

jobtbby31#

我只是想了结这件事以防有人遇到同样的问题。我在databricks云上重新创建了数据集,并使用了另一个docker映像,它只安装了pyspark。以上两个结果与我的windows pyspark行为相同。所以四个中有三个工作正常。话虽如此,我还是远离datastax dse docker image,因为它不会正常工作。使用自己的专有文件系统的datastax映像可能有问题。

相关问题