Извлеките Json из массива внутри JSON в искре - PullRequest
0 голосов
/ 05 июля 2018

У меня сложный столбец JSON, структура которого:

история { карты: [{story-elements: [{...} {...} {...}}]}

Длина сюжетных элементов является переменной. Мне нужно извлечь конкретный блок JSON из массива story-elements. Для этого мне сначала нужно извлечь элементы истории.

Вот код, который я пробовал, но он выдает ошибку:

import org.json4s.{DefaultFormats, MappingException}
import org.json4s.jackson.JsonMethods._
import org.apache.spark.sql.functions._

def getJsonContent(jsonstring: String): (String) = {
implicit val formats = DefaultFormats
val parsedJson = parse(jsonstring)
val value1 = (parsedJson\"cards"\"story-elements").extract[String]
value1
}
val getJsonContentUDF = udf((jsonstring: String) => 
getJsonContent(jsonstring))

input.withColumn("cards",getJsonContentUDF(input("storyDataFrame")))

1 Ответ

0 голосов
/ 06 июля 2018

Согласно предоставленной вами json, story-elements - это массив объектов json, но вы пытаетесь извлечь массив в виде строки ((parsedJson\"cards"\"story-elements").extract[String]).

Вы можете создать класс дел, представляющий историю (например, case class Story(description: String, pageUrl: String, ...)), а затем вместо extract[String] попробуйте extract[List[Story]] или extract[Array[Story]] Если вам нужен только один фрагмент данных из истории (например, descrition), вы можете использовать xpath-подобный синтаксис, чтобы получить его, а затем извлечь List[String]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...