У меня есть данные JSON, структурированные так:
[
{"eventName": "unmuteClick",
"intPayload":0,
"stringPayload": "",
"playbackId": "49309k-54353esfs-resf43-23fs43jk",
"sessionId": "324435-65657-3256-8787",
"timestamp": 1541632099009,
"pageAsin": "B00K7GXXKQ",
"videoAsin": "B078LXG579v"},
{"eventName": "muteClick",
"intPayload":1,
"stringPayload": "",
"playbackId": "49309k-54353esfs-resf43-23fs43jk",
"sessionId": "324435-65657-3256-8787",
"timestamp": 1541632099009,
"pageAsin": "B00K7GXXKQ",
"videoAsin": "B078LXG579v"},
{"eventName": "resumeClick",
"intPayload":1,
"stringPayload": "",
"playbackId": "49309k-54353esfs-resf43-23fs43jk",
"sessionId": "324435-65657-3256-8787",
"timestamp": 15416320990586,
"pageAsin": "B00K7GXXKQ",
"videoAsin": "B078LXG579v"},
{"eventName": "pauseClick",
"intPayload":1,
"stringPayload": "",
"playbackId": "49309k-54353esfs-resf43-23fs43jk",
"sessionId": "324435-65657-3256-8787",
"timestamp": 15416320990585,
"pageAsin": "B00K7GXXKQ",
"videoAsin": "B078LXG579v"},
{ "eventName": "mediaDuration",
"intPayload":10000,
"stringPayload": "",
"playbackId": "49309k-54353esfs-resf43-23fs43jk",
"sessionId": "324435-65657-3256-8787",
"timestamp": 1541632099010,
"pageAsin": "B00K7GXXKQ",
"videoAsin": "B078LXG579v"},
{"eventName": "firstQuartileCount",
"intPayload": 1,
"stringPayload": "",
"playbackId": "49309k-54353esfs-resf43-23fs43jk",
"sessionId": "324435-65657-3256-8787",
"timestamp": 1541632099010,
"pageAsin": "B00K7GXXKQ",
"videoAsin": "B078LXG579v"},
{"eventName": "secondQuartileCount",
"intPayload":1,
"stringPayload": "",
"playbackId": "49309k-54353esfs-resf43-23fs43jk",
"sessionId": "324435-65657-3256-8787",
"timestamp": 1541632099010,
"pageAsin": "B00K7GXXKQ",
"videoAsin": "B078LXG579v"},
{"eventName": "thirdQuartileCount",
"intPayload":0,
"stringPayload": "",
"playbackId": "49309k-54353esfs-resf43-23fs43jk",
"sessionId": "324435-65657-3256-8787",
"timestamp": 1541632099010,
"pageAsin": "B00K7GXXKQ",
"videoAsin": "B078LXG579v"},
{"eventName": "completeCount",
"intPayload":0,
"stringPayload": "",
"playbackId": "49309k-54353esfs-resf43-23fs43jk",
"sessionId": "324435-65657-3256-8787",
"timestamp": 1541632099010,
"pageAsin": "B00K7GXXKQ",
"videoAsin": "B078LXG579v"}
]
Каждая запись - это отдельное событие, которое может произойти во время воспроизведения видео.Одно воспроизведение видео имеет уникальный PlayId , поэтому вы можете видеть, что есть 10 событий, связанных с тем же воспроизведением.
Что мне нужно сделать, так это агрегировать и преобразовать эти данные в формат CSV, где в каждой строке будут агрегированные результаты для одного playsId .Мне нужно преобразовать значения в поле eventName в столбцы, где значения в поле intPayload являются значениями столбцов.
Вот схема, которую мне нужно использовать:
воспроизведениеId, sessionId, pageAsin, videoAsin, unmuteClick, muteClick, pauseClick, resumeClick, mediaDuration, firstQuartileCount, secondQuartileCount, thirdQuartileCount, completeCount, completeCount1019 *
Исходя из данных, значения для схемы будут выглядеть следующим образом:
"49309k-54353esfs-resf43-23fs43jk", "324435-65657-3256-8787", "B00K7GXXKQ"," B078LXG579v ", 1,1,1,1,10000,1,1,0,0"
(Для одного и того же идентификатора воспроизведения такие поля, как sessionId, pageAsin и videoAsin, будут одинаковыми.)
Что-нибудь уже существует для таких преобразований и агрегатов? Можно ли использовать Elastic Map Reduce для таких вычислений? Размер входных данных довольно велик.