使用Apache ORC文件格式将流持久保存到文件中时,是否可以对条目执行更新?在更新条目时,无需多次附加并有效地拥有条目。
incomingStreamDF.writeStream
.format("orc")
.option("path", "/mnt/adls/orc")
.option("checkpointLocation", "/mnt/adls/orc/check")
.trigger(ProcessingTime("25 seconds"))
.start()
似乎ORC支持更新,所以有一种方法可以在writeStream选项中指示条目的键。
答案 0 :(得分:3)
tl; dr 否(最高至Spark 2.4)
可以为您提供这种功能的唯一输出模式是Update
输出模式。由于orc
的格式是must always be used with Append output mode,是FileFormat
。
该问题的解决方案可能是使用全新的DataStreamWriter.foreachBatch运算符(或较旧的DataStreamWriter.foreach)在其中处理所需的数据(并且您可以轻松地在ORC中更新条目)文件(如果您知道如何操作)。
foreachBatch(函数:(数据集[T],长整数⇒单位):DataStreamWriter [T]
设置要使用提供的
function
处理的流查询的输出。仅在微批量执行模式下(即,触发器不连续时)才支持。
在每个微批处理中,将使用以下命令调用提供的函数:
(i)将输出行作为数据集
(ii)批次标识符。
可以使用batchId进行重复数据删除,并将输出(即提供的数据集)以事务方式写入外部系统。
对于相同的batchId,保证输出数据集完全相同(假定查询中的所有操作都是确定性的)。