проблема разбора искры json - PullRequest
0 голосов
/ 25 января 2020

не уверен, почему spark пропускает последние три столбца в моем Json, когда я пытаюсь запросить или напечатать схему.

       val stringTest =
      """{
                               "total_count": 123,
                               "page_size": 20,
                               "another_id": "gdbfdbfdbd",
                               "sen": [{
                                "id": 123,
                                "ses_id": 12424343,
                                "columns": {
                                    "blah": "blah",
                                    "count": 1234
                                },
                                "class": {},
                                "class_timestamps": {},
                                "sentence": "spark is good"
                               }]
                            }
                             """
    val result1 = List(stringTest)
    val githubRdd1=spark.sparkContext.makeRDD(result1)
    val gitHubDF1=spark.read.json(githubRdd1)
    gitHubDF1.show()
    gitHubDF1.printSchema()

почему он пропускает class, class_timestamps, senstense из Json строка?

Вывести значение схемы из спарка

root
 |-- another_id: string (nullable = true)
 |-- page_size: long (nullable = true)
 |-- sen: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- columns: struct (nullable = true)
 |    |    |    |-- blah: string (nullable = true)
 |    |    |    |-- count: long (nullable = true)
 |    |    |-- id: long (nullable = true)
 |    |    |-- sentence: string (nullable = true)
 |    |    |-- ses_id: long (nullable = true)
 |-- total_count: long (nullable = true)

Ответы [ 2 ]

1 голос
/ 25 января 2020

Это потому, что эти поля class, class_timestamps, senstense пусты. Он не может получить схему, не зная данных внутри. Таким образом, чтобы получить пример схемы, вам нужно предоставить хотя бы одну полностью заполненную строку json.

    val stringTest1 =      """{
                               "total_count": 123,
                               "page_size": 20,
                               "another_id": "gdbfdbfdbd",
                               "sen": [{
                                "id": 123,
                                "ses_id": 12424343,
                                "columns": {
                                    "blah": "blah",
                                    "count": 1234
                                },
                                "class": {"name":"className"},
                                "class_timestamps": {"timestamp1" : 1234},
                                "sentence": "spark is good"
                               }]
                            }
                             """
    val stringTest =
      """{
                               "total_count": 123,
                               "page_size": 20,
                               "another_id": "gdbfdbfdbd",
                               "sen": [{
                                "id": 123,
                                "ses_id": 12424343,
                                "columns": {
                                    "blah": "blah",
                                    "count": 1234
                                },
                                "class": {},
                                "class_timestamps": {},
                                "sentence": "spark is good"
                               }]
                            }
                             """
    import spark.implicits._
    val df = spark.read.json(Seq(stringTest,stringTest1).toDS)
    df.printSchema()

Схема -

root
 |-- another_id: string (nullable = true)
 |-- page_size: long (nullable = true)
 |-- sen: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- class: struct (nullable = true)
 |    |    |    |-- name: string (nullable = true)
 |    |    |-- class_timestamps: struct (nullable = true)
 |    |    |    |-- timestamp1: long (nullable = true)
 |    |    |-- columns: struct (nullable = true)
 |    |    |    |-- blah: string (nullable = true)
 |    |    |    |-- count: long (nullable = true)
 |    |    |-- id: long (nullable = true)
 |    |    |-- sentence: string (nullable = true)
 |    |    |-- ses_id: long (nullable = true)
 |-- total_count: long (nullable = true)
0 голосов
/ 29 апреля 2020

Я бы предложил не использовать внутреннюю библиотеку Json spark. Стало очень сложно обрабатывать вложенные схемы json. Вместо этого читайте его как String и анализируйте этот Json String в Json объект, используя следующую зависимость:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20190722</version>
</dependency>

для sbt это

libraryDependencies += "org.json" % "json" % "20190722"

и используйте приведенные ниже библиотеки для преобразования Json:

val jsonObj = new JSONObject(jsonStr)
val jsonObj = new JSONArray(jsonStr)

В нем есть несколько методов "get" для извлечения указанных c object / string / int / timestamp / array et c.

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