Azure Stream Analytics替代Sparks mapWithState

问题描述 投票:1回答:1

Azure Stream Analytics中是否有一种方法可以像Sparks mapWithState那样使用自定义状态创建一些聚合?

这是我的场景:

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

  • 设备编号
  • 位置

数据可能无序到达。

每当新数据包到达给定的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中实现这一点?

azure-stream-analytics
1个回答
1
投票

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

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

如果您需要帮助来实施这3种方法中的一种,请告诉我。我很乐意提供进一步的细节。

谢谢,

JS

© www.soinside.com 2019 - 2024. All rights reserved.