【问题标题】:Spark Structured Streaming mapGroupWithState output to parquetSpark结构化流mapGroupWithState输出到镶木地板
【发布时间】:2018-08-08 16:18:00
【问题描述】:

我有一个 Spark Structured Streaming 应用程序,它使用 ma​​pGroupWithState 进行事件合并。它与 console 接收器完美配合,但在生产中我需要以 parquet 格式写入数据,但我很困惑,因为 ma​​pGroupWithState 需要 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


【解决方案1】:

或者,您可以将 flatMapGroupsWithState 与附加模式一起使用(mapGroupWithState 是 flatMapGroupsWithState 的一个特例)。

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

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

【讨论】:

    猜你喜欢
    • 2016-06-16
    • 1970-01-01
    • 2020-02-25
    • 2016-07-04
    • 1970-01-01
    • 2019-01-20
    • 2021-09-24
    • 2018-06-06
    • 1970-01-01
    相关资源
    最近更新 更多