Apache spark 如果立即读取数据,则对hdfs文件的spark结构化流读取将失败

Apache spark 如果立即读取数据,则对hdfs文件的spark结构化流读取将失败,apache-spark,hive,hdfs,spark-structured-streaming,Apache Spark,Hive,Hdfs,Spark Structured Streaming,在使用Spark Structured Streaming将新批写入HDFS(target\u table\u dir)后,我想加载一个配置单元表(target\u table)作为数据帧,如下所示: df.writeStream .trigger(processingTime='5 seconds') .foreachBatch(lambda df, partition_id: df.write .option("path", target_table_dir)

在使用Spark Structured Streaming将新批写入HDFS(
target\u table\u dir
)后,我想加载一个配置单元表(
target\u table
)作为数据帧,如下所示:

df.writeStream
  .trigger(processingTime='5 seconds')
  .foreachBatch(lambda df, partition_id:
    df.write
      .option("path", target_table_dir)
      .format("parquet")
      .mode("append")
      .saveAsTable(target_table))
  .start()
当我们立即从配置单元表读回相同的数据时,我们得到一个“PartitionNotFoundException”。如果我们延迟阅读,数据就正确了

Spark似乎仍在向HDFS写入数据,而执行已停止,配置单元元存储已更新,但数据仍在向HDFS写入

如何知道将数据写入配置单元表(HDFS)的操作何时完成

注:
我们发现,如果我们在写出来之后使用processAllAvailable(),后续的读取工作就可以了。但是,如果我们处理的是连续流,processAllAvailable()将永远阻止执行。

当我们立即尝试从配置单元表读回相同的数据时,您是怎么做的?我们遇到了分区未找到异常。”?您如何知道何时追加表(在执行5秒触发器后)?我们无法确定何时追加表。作为工作流的一部分,我们正在尝试将数据读回作为下一步并获取错误。我们需要一种方法来确定是否追加表finished@JacekLaskowski…我们发现,如果我们使用processAllAvailable()写入后。后续读取工作正常。但是如果我们处理的是连续流,processAllAvailable()将永远阻止执行。可能正在使用S3。提交者应该修复它