我有一个Spark结构化流应用程序,该应用程序将事件与 mapGroupWithState 合并。它可以与控制台接收器完美配合,但是在生产中我需要以镶木地板格式写入数据,但是令人困惑,因为 mapGroupWithState 需要 Update 模式和镶木地板输出需要追加模式。这里有什么解决办法吗?或者在这种情况下我们可以使用 foreach 接收器。
val query: Dataset[BidData] = bidStream
.groupByKey(_.auction_id)
.mapGroupsWithState(GroupStateTimeout.ProcessingTimeTimeout())(updateBidState)
.flatMap(b => b)
query.writeStream
.outputMode(OutputMode.Update())
.format("parquet")
.option("path", appConfig.s3Output)
.option("checkpointLocation", appConfig.checkpoint)
答案 0 :(得分:0)
或者,您可以在附加模式下使用flatMapGroupsWithState(mapGroupWithState是flatMapGroupsWithState的特例)。
但是,如果您这样做,则实木复合地板文件中将包含所有历史出价状态。如果需要获取最后的出价状态,则必须编写查询(假设您将使用SparkSQL或Hive)以返回最后的出价状态。