1

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

allExchangeRatesDF.write.saveAsTable("exchangeRates")

那么如何最好(对于管理此数据的批处理作业)优雅地更新表内容(实际上完全覆盖它) - 考虑到各种 Spark 作业作为它的消费者,特别是在某些 24/7 结构化流中使用它?

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

谢谢!

4

1 回答 1

0

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

我认为处理该要求的最佳方法是附加新记录(使用insertInto)和批处理 id 表示属于“新表”的行。

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

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

于 2017-07-14T00:52:37.393 回答