【发布时间】:2018-08-08 16:18:00
【问题描述】:
我有一个 Spark Structured Streaming 应用程序,它使用 mapGroupWithState 进行事件合并。它与 console 接收器完美配合,但在生产中我需要以 parquet 格式写入数据,但我很困惑,因为 mapGroupWithState 需要 Update模式和 parquet 输出需要 Append 模式。这里有什么解决办法吗?或者我们可以在这种情况下以某种方式使用 foreach sink。
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)
【问题讨论】:
-
您如何想象将这些数据存储在 parquet 文件中?据我了解,parquet 中会保存几个状态,您将如何使用这些数据?您需要历史状态更改吗?如果是这样,我建议将此流下沉到 Kafka 等,并在附加模式下让另一个流从 Kafka 到镶木地板。
标签: apache-spark spark-streaming spark-structured-streaming