Схема Spark JSON для динамических ключевых полей? - PullRequest
0 голосов
/ 27 февраля 2019

Я получаю данные JSON от Кафки методом from_json().Он ожидает от меня схемы.Моя структура JSON такая:

{
    "Items": {
        "key1": [
            {
                "id": "",
                "name": "",
                "val": ""
            }
        ],
        "key2": [
            {
                "id": "",
                "name": "",
                "val": ""
            }
        ],
        "key3": [
            {
                "id": "",
                "name": "",
                "val": ""
            }
        ]
    }
}

В этом состоянии;key1, key2, key3 поля неизвестны.Итак, они dynamic.Имя этих полей может быть "abc", "def" и т. Д. Как определить схему JSON для этого JSON в Spark Structured Streaming?

РЕДАКТИРОВАТЬ: Например, другой json;

{
        "Items": {
            "stack": [
                {
                    "id": "",
                    "name": "",
                    "val": ""
                }
            ],
            "over": [
                {
                    "id": "",
                    "name": "",
                    "val": ""
                }
            ],
            "flow": [
                {
                    "id": "",
                    "name": "",
                    "val": ""
                }
            ]
        }
    }

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Вам нужно определить свою схему для разбора таких файлов json.Ваша схема должна выглядеть следующим образом.

val valSchema = new StructType()
  .add("id", StringType)
  .add("name", StringType)
  .add("val", StringType)

val valArrSchema = new ArrayType(valSchema, true)
val mapSchema = new MapType(StringType, valArrSchema, true)
val jsonSchema =  new StructType().add("Items", mapSchema)

Вы можете проанализировать json, используя метод from_json.

val testDF = df.withColumn("json", from_json(col("value"),jsonSchema ))
0 голосов
/ 27 февраля 2019

key1, key2 и key3 не являются полями.Они имеют значение ключа!Здесь есть поля id, name, value и key, а значения key могут быть динамическими, и это нормально, и здесь нет никакой сложности.

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