Apache spark 如果同时有多个读卡器,如何更新甚至重置持久表中的行?

Apache spark 如果同时有多个读卡器,如何更新甚至重置持久表中的行?,apache-spark,spark-structured-streaming,Apache Spark,Spark Structured Streaming,我有一个exchangeRates表,每周批量更新一次。这将被其他批处理和流式处理作业跨不同集群使用-因此我想将其保存为一个持久的共享表,供所有作业共享 allExchangeRatesDF.write.saveAsTable("exchangeRates") 那么(对于管理此数据的批处理作业)如何最好地优雅地更新表内容(实际上完全覆盖它)——将各种spark作业视为它的消费者,特别是在一些24/7结构化流媒体中使用它 我检查了API,也许我遗漏了一些明显的东西!很可能 谢谢 我认为您希望Sp

我有一个exchangeRates表,每周批量更新一次。这将被其他批处理和流式处理作业跨不同集群使用-因此我想将其保存为一个持久的共享表,供所有作业共享

allExchangeRatesDF.write.saveAsTable("exchangeRates")
那么(对于管理此数据的批处理作业)如何最好地优雅地更新表内容(实际上完全覆盖它)——将各种spark作业视为它的消费者,特别是在一些24/7结构化流媒体中使用它

我检查了API,也许我遗漏了一些明显的东西!很可能


谢谢

我认为您希望Spark提供某种事务支持,因此当
saveAsTable
正在进行时,Spark将保留所有写入操作,直到更新/重置完成

我认为处理该需求的最佳方法是使用批id追加新记录(使用),该批id表示属于“新表”的行

insertInto(tableName:String):Unit将数据帧的内容插入到指定的表中。它要求数据帧的模式与表的模式相同


然后,您将使用批处理id来处理这些行,就像它们是数据集中唯一的行一样。

我认为您希望Spark提供某种事务支持,因此当有
saveAsTable
正在进行时,Spark将保留所有写入操作,直到更新/重置完成

我认为处理该需求的最佳方法是使用批id追加新记录(使用),该批id表示属于“新表”的行

insertInto(tableName:String):Unit将数据帧的内容插入到指定的表中。它要求数据帧的模式与表的模式相同


然后,您可以使用批处理id来处理这些行,就好像它们是数据集中唯一的行一样。

您是否尝试过
allExchangeRatesDF.write.mode(“覆盖”).saveAsTable(“交换率”)
?您是否尝试过
allExchangeRatesDF.write.mode(“覆盖”).saveAsTable(“交换率”)