Как использовать фрейм данных from_json () в Spark? - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь создать набор данных из json-строки в кадре данных в Databricks 3.5 (Spark 2.2.1).В блоке кода ниже «jsonSchema» представляет собой StructType с правильным макетом для строки json, которая находится в столбце «body» информационного кадра.

val newDF = oldDF.select(from_json($"body".cast("string"), jsonSchema))

Возвращает информационный кадр, в котором корневым объектом является

jsontostructs(CAST(body AS STRING)):struct

, за которыми следуют поля в схеме (выглядит правильно).Когда я пытаюсь выбрать другое на newDF

val transform = newDF.select($"propertyNameInTheParsedJsonObject")

, оно выдает исключение

org.apache.spark.sql.AnalysisException: cannot resolve '`columnName`' given 
input columns: [jsontostructs(CAST(body AS STRING))];;

Я, по-видимому, что-то упускаю.Я надеялся, что from_json вернет фрейм данных, которым я мог бы манипулировать дальше.

Моя конечная цель - преобразовать строку json внутри столбца тела oldDF в набор данных.

1 Ответ

0 голосов
/ 23 октября 2018

from_json возвращает столбец struct или (array<struct<...>>).Это означает, что это вложенный объект.Если вы предоставили осмысленное имя:

val newDF = oldDF.select(from_json($"body".cast("string"), jsonSchema) as "parsed")

и схема описывает простой struct, вы можете использовать стандартные методы , например

newDF.select($"parsed.propertyNameInTheParsedJsonObject")

, в противном случае, пожалуйста,следуйте инструкциям для доступа к массивам.

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