Spark结构化流mapGroupWithState输出到实木复合地板

时间:2018-08-08 16:18:00

标签: apache-spark spark-streaming spark-structured-streaming

我有一个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)

1 个答案:

答案 0 :(得分:0)

或者,您可以在附加模式下使用flatMapGroupsWithState(mapGroupWithState是flatMapGroupsWithState的特例)。

但是,如果您这样做,则实木复合地板文件中将包含所有历史出价状态。如果需要获取最后的出价状态,则必须编写查询(假设您将使用SparkSQL或Hive)以返回最后的出价状态。

参考: https://jaceklaskowski.gitbooks.io/spark-structured-streaming/spark-sql-streaming-KeyValueGroupedDataset-flatMapGroupsWithState.html