Scala - как взорвать массив JSON, аналогичный DataFrame с json4s?
Мой первоначальный подход к обработке JSON из двух разных конечных точек API, содержащих информацию о магазине и информацию о продажах, заключался в следующем: объединить JValue(структуру) каждого магазина с соответствующим JValue продаж (содержащим массив продаж). Затем я создал DataFrame и взорвал массив Sales, чтобы иметь возможность выбирать из него данные позже.
val salesDf: DataFrame = salesRawDf.select($"stores", explode($"sales").as("sl"))
.select($"stores.id", $"stores.name", $"sl.id", $"sl.current_sales", $"sl.review")
Но теперь кажется, что взрыв вызывает огромные накладные расходы, и я получаю OutOfMemoryError: Java heap space
при запуске работы Spark.
Поэтому я решил изменить логику и проанализировать продажи в месте, где я конкатенировал JValues, до параллельного выполнения.
Что бы быть аналогом exploding
массив продаж, как указано выше при разборе JSON с json4s? Теперь я объединяю магазины и продажи следующим образом:
def mergeSales(storeJValue: JValue): String = {
val salesJValue: JValue = parse(rawJson)
val store = compact(render(storeJValue))
val sales = compact(render(salesJValue))
val mergedSales: String = s"""{"store":$store,"sales":$sales}"""
mergedSales
}