#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
)
)
)
)
Чтобы все дубликаты были сгруппированы по месяцам, иначе. значение даты.
Мне действительно трудно разобраться в подобных проблемах, поэтому я был бы благодарен за любую помощь. Заранее спасибо.