首页 > 解决方案 > Spark readStream 不会获取输入文件中的架构更改。如何解决?

问题描述

在将其合并到基本增量表之前,我有以下脚本可以使用 spark 结构化流读取 CDC 数据。

streamDf = spark \
    .readStream \
    .format('csv') \
    .option("mergeSchema", "true") \
    .option('header', 'true') \
    .option("path", CDCLoadPath) \
    .load()

streamQuery = (streamDf \
               .writeStream \
               .format("delta") \
               .outputMode("append") \
               .foreachBatch(mergetoDelta) \
               .option("checkpointLocation", f"{CheckpointLoc}/_checkpoint") \
               .trigger(processingTime='20 seconds') \
               .start())

每当我在源表中添加一个新列时,尽管基础数据有一个新列,但读取流不会从源文件中获取架构更改。但是如果我手动重新启动脚本,它会使用新列更新架构。有没有办法让流媒体在运行时拾取它?

标签: apache-sparkpysparkspark-streamingspark-structured-streaming

解决方案


您需要有一个提供输入模式的对象,或者您必须重新启动以进行模式推断

https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#schema-inference-and-partition-of-streaming-dataframesdatasets


推荐阅读