Агрегации файлов JSON и преобразования в .csv - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть данные 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 для таких вычислений? Размер входных данных довольно велик.

...