Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何使用flatMapGroupsWithState进行有状态聚合?_Apache Spark_Spark Structured Streaming - Fatal编程技术网

Apache spark 如何使用flatMapGroupsWithState进行有状态聚合?

Apache spark 如何使用flatMapGroupsWithState进行有状态聚合?,apache-spark,spark-structured-streaming,Apache Spark,Spark Structured Streaming,应用flatMapGroupsWithState时,我收到以下错误消息 线程“main”org.apache.spark.sql.AnalysisException中的异常:流数据帧/数据集上的聚合不支持更新模式下的flatMapGroupsWithState 以下是我正在尝试做的 阅读来自卡夫卡的消息并解析它 基于特定维度的分组 为每个组运行UDAF并计算每个组的聚合agg不返回KeyValueGroupDataSet,因此在上一步输出中将groupByKey应用到基于agg函数列的组 使用

应用
flatMapGroupsWithState
时,我收到以下错误消息

线程“main”org.apache.spark.sql.AnalysisException中的异常:流数据帧/数据集上的聚合不支持更新模式下的flatMapGroupsWithState

以下是我正在尝试做的

  • 阅读来自卡夫卡的消息并解析它
  • 基于特定维度的分组
  • 为每个组运行UDAF并计算每个组的聚合
    agg
    不返回
    KeyValueGroupDataSet
    ,因此在上一步输出中将
    groupByKey
    应用到基于
    agg函数
    列的组
  • 使用
    flatMapGroupsWithState
    将此聚合合并到流的上一个状态
正在获取最后一步的错误消息

此错误是否意味着在数据集上应用
agg(..)
后无法应用
flatMapGroupsWithState

此错误是否意味着在数据集上应用
agg(..)
后无法应用
flatMapGroupsWithState

不是真的。上面说(我的)

流式数据帧/数据集上的聚合不支持更新模式下的flatMapGroupsWithState

这意味着您使用默认的输出模式,即
更新
,但应该是
完整
附加
,如Spark官方文档中所述(请参阅“使用flatMapGroupsWithState的查询”查询类型)


从评论中可以看出:

而且
flatMapGroupWithState
也支持更新操作。从
KeyValueGroupedDataset
if(outputMode!=outputMode.Append&&outputMode!=outputMode.Update){抛出新的IllegalArgumentException(“函数的输出模式应为Append或Update”)}

没错,
flatMapGroupWithState
支持追加和更新输出模式,但仅当作为输入参数的一部分提供时。请参见
KeyValueGroupedDataset.flatMapGroupWithState
的签名:

flatMapGroupsWithState[S, U](
  outputMode: OutputMode, // <-- HERE
  timeoutConf: GroupStateTimeout)(
  func: (K, Iterator[V], GroupState[S]) ⇒ Iterator[U]): Dataset[U]
flatMapGroupsWithState[S,U](
outputMode:outputMode//