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,而且你只分组一次。