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
  }

0 ответов

Другие вопросы по тегам