Azure 流分析替代 Sparks mapWithState

Posted

技术标签:

【中文标题】Azure 流分析替代 Sparks mapWithState【英文标题】:Azure Stream Analytics alternative to Sparks mapWithState 【发布时间】:2019-03-22 21:08:14 【问题描述】:

Azure 流分析中是否有一种方法可以像 Sparks mapWithState 那样创建一些具有自定义状态的聚合?

这是我的场景:

我有来自 IoT 设备的数据,其中包含以下字段:

设备ID 位置 价值

数据可能乱序到达。

每当给定 DeviceId 的新数据包到达时,我想输出该设备的最后 n 个位置和值。喜欢

输入: "DeviceId": "A", "Position": 10, "Value": 100

输出: "DeviceId": "A", "Positions": [10], "Value": [100]


下一个输入: "DeviceId": "A", "Position": 11, "Value": 101

输出: "DeviceId": "A", "Positions": [10, 11], "Value": [100, 101]


下一个输入: "DeviceId": "A", "Position": 9, "Value": 99

输出: "DeviceId": "A", "Positions": [9, 10, 11], "Value": [9, 100, 101]

在 Spark Structured Streaming 中,我将使用 groupBymapWithState 来实现这一点。有没有办法在 ASA 中实现这一点?

【问题讨论】:

【参考方案1】:

在 ASA 中,您可以使用以下方法之一来执行此操作:

如果您有一个可用于 TIMESTAMP 的附加列,您 可以使用 TIMESTAMP BY 和 ASA 将重新排序事件。那么你就可以 使用 LAG 获取此特定设备的最新事件。 没有任何时间戳列,您可以创建COLLECTTOP 运算符,并根据您的“位置”列对事件进行排序 或者,您可以使用用户定义的聚合 (UDA) 来实现自己的状态逻辑,如 here 所述。

如果您需要帮助来实施这 3 种方法之一,请告诉我。我很乐意提供更多详细信息。

谢谢,

JS

【讨论】:

我的数据可能会乱序到达,并且可能会迟到一天。但是当消息到达时,我希望尽快广播更新的状态。我没有找到一种方法来使用支持的时间窗口函数来实现这一点。感谢您将我指向 UDA。我会试试看的。

以上是关于Azure 流分析替代 Sparks mapWithState的主要内容,如果未能解决你的问题,请参考以下文章

Azure 流分析:如何使用两个 Azure 机器学习函数

具有事件中心输入流位置的 Azure 流分析

Azure 流分析 - 沿流查询

Grafana 作为 Azure 流分析输出

Azure Functions 与 Azure 流分析

Azure 流分析输出到 Azure Cosmos DB