mule dataweave 中的 Sum 函数需要太多时间
Sum function in mule dataweave takes too much time
我有一个包含超过 45,000 条记录的 ArrayList。我想创建一个新列表,当列表中存在 ID 和名称值的组合时,它将包含所有值的总和。例如下面是我的输入列表。我通过读取 xls 文件并将其存储在一个名为 "myList" -
的变量中来创建此列表
[
{ID=481, name =ABCD, value=100},
{ID=481, name =ABCD, value=50},
{ID=2053, name =XYZ, value=300}
]
我的代码-
%dw 1.0
%output application/java
%function getIdname(ID, name) (ID ++ " - " ++ name)
%function addAllValues(ID, name) sum ((flowVars.myList.Data filter (getIdname($.ID,$.name) == getIdname(ID, name))).value)
---
{
Data: flowVars.myList.Data map ((payload01 , indexOfPayload01) -> {
ID: payload01.ID,
name: payload01.name,
finaValue : addAllValues(payload01.ID, payload01.name)
})
}
输出-
Data=[
{ID=481, name =ABCD, finalValue=150},
{ID=2053, name =XYZ, finalValue=300}
]
在这里,对于包含 5 条或 10 条记录的文件,我得到了上述所需的输出。但是,如果我使用包含超过 45,000 条记录的实际文件,则执行我的代码会花费太多时间,并且不会创建任何输出。另外,我没有任何例外。谁能建议我在这里做错了什么。为什么要花这么多时间来总结相等的记录。我已经检查了 40 分钟,但仍然没有收到任何输出
您在 map
的每次迭代中过滤了 45000 条记录,这导致了此延迟(即您过滤了 45000 次)。您只需 filter/group
一次。您的数据编织也不会产生您想要的输出,因为没有使用 distinctBy。
试试这个:
%dw 1.0
%output application/java
%var dataByIdName = flowVars.myList.Data groupBy ($.ID ++ $.name)
---
{
Data: dataByIdName map {
ID: $[0].ID,
name: $[0].name,
finalValue: sum $.*value
}
}
这不需要 distinctBy,而且你只分组一次。
我有一个包含超过 45,000 条记录的 ArrayList。我想创建一个新列表,当列表中存在 ID 和名称值的组合时,它将包含所有值的总和。例如下面是我的输入列表。我通过读取 xls 文件并将其存储在一个名为 "myList" -
的变量中来创建此列表[
{ID=481, name =ABCD, value=100},
{ID=481, name =ABCD, value=50},
{ID=2053, name =XYZ, value=300}
]
我的代码-
%dw 1.0
%output application/java
%function getIdname(ID, name) (ID ++ " - " ++ name)
%function addAllValues(ID, name) sum ((flowVars.myList.Data filter (getIdname($.ID,$.name) == getIdname(ID, name))).value)
---
{
Data: flowVars.myList.Data map ((payload01 , indexOfPayload01) -> {
ID: payload01.ID,
name: payload01.name,
finaValue : addAllValues(payload01.ID, payload01.name)
})
}
输出-
Data=[
{ID=481, name =ABCD, finalValue=150},
{ID=2053, name =XYZ, finalValue=300}
]
在这里,对于包含 5 条或 10 条记录的文件,我得到了上述所需的输出。但是,如果我使用包含超过 45,000 条记录的实际文件,则执行我的代码会花费太多时间,并且不会创建任何输出。另外,我没有任何例外。谁能建议我在这里做错了什么。为什么要花这么多时间来总结相等的记录。我已经检查了 40 分钟,但仍然没有收到任何输出
您在 map
的每次迭代中过滤了 45000 条记录,这导致了此延迟(即您过滤了 45000 次)。您只需 filter/group
一次。您的数据编织也不会产生您想要的输出,因为没有使用 distinctBy。
试试这个:
%dw 1.0
%output application/java
%var dataByIdName = flowVars.myList.Data groupBy ($.ID ++ $.name)
---
{
Data: dataByIdName map {
ID: $[0].ID,
name: $[0].name,
finalValue: sum $.*value
}
}
这不需要 distinctBy,而且你只分组一次。