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 中,我将使用 groupBy
和 mapWithState
来实现这一点。有没有办法在 ASA 中实现这一点?
【问题讨论】:
【参考方案1】:在 ASA 中,您可以使用以下方法之一来执行此操作:
如果您有一个可用于 TIMESTAMP 的附加列,您 可以使用 TIMESTAMP BY 和 ASA 将重新排序事件。那么你就可以 使用 LAG 获取此特定设备的最新事件。 没有任何时间戳列,您可以创建COLLECTTOP 运算符,并根据您的“位置”列对事件进行排序 或者,您可以使用用户定义的聚合 (UDA) 来实现自己的状态逻辑,如 here 所述。如果您需要帮助来实施这 3 种方法之一,请告诉我。我很乐意提供更多详细信息。
谢谢,
JS
【讨论】:
我的数据可能会乱序到达,并且可能会迟到一天。但是当消息到达时,我希望尽快广播更新的状态。我没有找到一种方法来使用支持的时间窗口函数来实现这一点。感谢您将我指向 UDA。我会试试看的。以上是关于Azure 流分析替代 Sparks mapWithState的主要内容,如果未能解决你的问题,请参考以下文章