Сопоставление набора данных Google Analytics

#list #scala #google-analytics #mapping #filtering

#Список #scala #google-analytics #сопоставление #фильтрация

Вопрос:

У меня есть набор данных из Google Analytics, который мне трудно сопоставить с чем-то полезным, что я могу использовать в производстве.

Необработанные данные представляют собой список объектов класса case, которые выглядят следующим образом:

 case class Stats(id: String, date: Int, pViews: Int, uViews: Int)
  

Я занялся составлением списка объектов, подобных этому:

 val skuMatch = "[A-Z][0-9]{10}".r
val mappedRaw = rawData
  .map(row => {
    val idCheck = idMatch.findFirstIn(row.getDimensions()(1))
    val id = if (idCheck.isDefined) idCheck.get else ""
    val date = row.getDimensions()(0).toInt
    val pViews = row.getMetrics()(0).getValues()(0).toInt
    val uViews = row.getMetrics()(0).getValues()(1).toInt
    Stats(id, date, pViews, uViews)
  }).filter(!_.id.isEmpty)
}
  

Итак, теперь у меня есть список объектов, которые являются «чистыми», поэтому нет пустых грязных значений. Объект может выглядеть следующим образом:

 Stats("A0000000008", 201608, 10, 1)
  

Теперь список содержит несколько объектов с одинаковым id значением, поскольку затем они имеют другое date значение или могут быть допустимыми дубликатами, где pViews uViews данные и все еще актуальны.

 Stats("A0000000008", 201609, 12, 5)
Stats("A0000000008", 201609, 8, 2)
  

Поэтому мой вопрос заключается в том, как мне создать структуру, которая выглядит следующим образом:

 case class DataMonth(monthYear: Int, uViews: Int, pViews: Int)
case class NewStats(id: String, months: List(DataMonth))
  

Пример объекта:

 List(
    NewStats(
        "A0000000008",
        List(
            DataMonth(
                201608,
                10,
                1
            ),
            DataMonth(
                201609,
                20,
                7
            )
        )
    )
)
  

Чтобы все дубликаты были сгруппированы по месяцам, иначе. значение даты.

Мне действительно трудно разобраться в подобных проблемах, поэтому я был бы благодарен за любую помощь. Заранее спасибо.