как транспонировать CSV в муле 4? - PullRequest
0 голосов
/ 10 октября 2019

У меня есть полезная нагрузка csv, которая выглядит следующим образом

id,header,value
1,addr1,hyd
1,addr2,blr
2,addr1,rpr
2,addr2,knk
2,addr3,jpn

Требуется преобразовать полезную нагрузку вывода в эту

id,addr1,addr2,addr3
1,hyd,blr,
2,rpr,knk,jpn

Я пробовал несколько подходов с участием groupBy, но не смог достичь желаемоговыход. Вот как моя группаBy payload groupBy (item) -> item.id

Может кто-нибудь, пожалуйста, помогите мне? Заранее спасибо.

1 Ответ

2 голосов
/ 10 октября 2019
%dw 2.0
output application/csv
// Get the distinct headers, maybe you want them ordered too
var headers = "id" >> (payload.*header distinctBy $ orderBy $)
// Get the rows but organize them so that you have objects {header: value}
var rows = payload groupBy $.id 
mapObject (
    {($$): 
        $ reduce (e, acc={id: $$}) -> acc ++ {(e.header): e.value}
    }
) 
pluck $
---
// Iterate over the rows
rows map (
    // Iterate over the headers and add the values
    headers reduce (e, acc={}) -> acc ++ {(e): $[e]}
)
...