如何在结构化流中保留和重置状态?

时间:2019-02-15 04:07:10

标签: apache-spark spark-streaming

我有一个要求,我需要显示从当天开始到当前时间的特定类别的汇总计数。

我正在使用结构流进行分组。由于窗口不能持久保存数据帧的状态,因此我不确定如何实现可以持久保存其状态并在先前状态增加计数器的逻辑。 另外,如何在新的一天开始时重置状态。

输入记录:

{"Floor_Id" : "Shop Floor 1",
"HaltRecord" : {
    "HaltReason" : "Danahydraulic Error",
    "Severity" : "Low",
    "FaultErrorCategory" : "Docked",
    "NonFaultErrorCategory" : null
},
"Description" : "Forklift",
"Category" : {
    "Type" : "Halt",
    "End_time" : NumberLong(2018-02-13T12:00:01),
    "Start_time" : NumberLong(2018-02-13T12:00:00)
},
"Asset_Id" : 123,
"isError" : "y",
"Timestamp": 2018-02-13T12:00:01}

输出响应:

{
    "Floor_Id": "Shop Floor 1",
    "Error_Category": [
        {
            "Category": "Operator Error",
            "DataPoints": 
                {
                    "NumberOfErrors": 20,
                    "Date": 2018-02-13
                }
        },
        {
            "Category": "Danahydraulic Error",
            "DataPoints": {
                    "NumberOfErrors": 15,
                    "Date": 2018-02-13
                }
        }
    ]
}

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我还没有使用结构化流的状态函数,但是我知道它的mapGroupWithState函数提供了保持状态并进行逻辑计数的功能。