Я извлекаю данные из разных конечных точек API и затем обрабатываю их, чтобы впоследствии создать DataFrame из JSON.После обработки каждая строка JSON состоит из данных о магазине, его показателях отдела и отдела.В каждом магазине может быть несколько отделов, а в каждом отделе может быть несколько показателей.И в этом случае List[String]
возвращается после обработки.
Однако я заметил, что если в магазине нет отделов, весь магазин пропадет.Также как если у отдела нет метрик, у меня нет возвращаемых данных.
Но я хочу, чтобы данные хранилища и отдела возвращались, даже если метрики отдела отсутствуют.Или просто хранить данные, если у них нет отделов.
Вот моя текущая реализация:
def processStoreData(store: JValue): List[String] = {
implicit val formats: DefaultFormats.type = DefaultFormats
val departmentsArray: JArray = parse(departmentsFromAPI).asInstanceOf[JArray]
def getMergeMetrics(department: JValue): List[String] = {
val metricsArray: JArray = parse(metricsFromAPI).asInstanceOf[JArray]
mergeStoreDepartmentsMetrics(metricsArray, store, department)
}
// For each Department get its Metrics and merge with the Store data
val mergedData: List[String] = departmentsArray.children.flatMap(deptEntry =>
getMergeMetrics(deptEntry))
mergedData
}
// Merging each Metric with its Department and a Store the Department belongs to
def mergeStoresDepartmentsMetrics(metricsArray: JArray, store: JValue, department: JValue): List[String] = {
metricsArray.children
.map(metric => store merge metric merge department)
.map(mergedData => compact(render(mergedData)))
}
Я предполагаю, что логику следует изменить так, чтобы, если departmentsArray
был пустым, он возвращал только строковое представление store
JValue.И если в магазине есть отдел, в котором отсутствуют метрики, он должен вернуть объединенные магазин и отдел.
Я недавно начал изучать Scala и не уверен, что может быть лучшим способом реализации логики.И нужен совет, что я должен изменить в моей текущей реализации?
Я пытался использовать сопоставление с образцом, но это не сработало.«дети» выделены красным, а всплывающее окно указывает 'Cannot resolve symbol children'
и выше deptEntry
- 'Missing parameter type:deptEntry'
val mergedData: List[String] = departmentsArray match {
case JArray(deptArr) if deptArr.nonEmpty =>
deptArr.children.flatMap(deptEntry =>
getMergeMetrics(deptEntry))
case _ => List(compact(render(store)))
}