如何在给定多个同时读取器的情况下更新甚至重置持久表中的行?

时间:2017-07-13 09:16:58

标签: apache-spark spark-structured-streaming

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

allExchangeRatesDF.write.saveAsTable("exchangeRates")

如何最佳(对于管理此数据的批处理作业)正常更新表格内容(实际上完全覆盖它) - 将各种火花作业视为消费者并特别考虑其使用在一些24/7结构化流媒体流?

我检查了API,也许我错过了一些明显的东西!非常可能。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你期望来自Spark的某种事务支持,所以当saveAsTable正在进行中时,Spark将保留所有写入,直到更新/重置完成。

我认为处理该要求的最佳方法是追加新记录(使用insertInto),其批处理ID表示属于&#34的行;新表"。

  

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

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