Как разбить геойсон данных в столбцах с помощью Spark SQL Scala - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть данные GeoJSON в виде structtype, подобного следующему:

root
 |-- features: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- geometry: struct (nullable = true)
 |    |    |    |-- coordinates: array (nullable = true)
 |    |    |    |    |-- element: array (containsNull = true)
 |    |    |    |    |    |-- element: array (containsNull = true)
 |    |    |    |    |    |    |-- element: double (containsNull = true)
 |    |    |    |-- type: string (nullable = true)
 |    |    |-- properties: struct (nullable = true)
 |    |    |    |-- auswertezeit: string (nullable = true)
 |    |    |    |-- geschwindigkeit: long (nullable = true)
 |    |    |    |-- strecke_id: long (nullable = true)
 |    |    |    |-- verkehrsstatus: string (nullable = true)
 |    |    |-- type: string (nullable = true)
 |-- type: string (nullable = true)

, и я разделю данные по столбцам: strecke_id, auswertezeit, strecke_id, verkehrsstatus, geschwindigkeit и координаты.Спасибо за вашу помощь

1 Ответ

0 голосов
/ 22 ноября 2018

Вот немного упрощенный пример, но он даст вам направление для настройки логики на основе ваших собственных спецификаций:

import sparkSession.implicits._

val geoDF = sparkSession.read.json("./src/test/resources/geo.json")

val resultDf = geoDF.withColumn("exploaded", functions.explode($"features"))
  .select("exploaded.properties.auswertezeit", "exploaded.properties.geschwindigkeit",
    "exploaded.properties.strecke_id", "exploaded.properties.verkehrsstatus")

resultDf.show()
resultDf.printSchema()

Входные данные (отформатированные):

{
    "features": [
        {
            "properties": {
                "auswertezeit": "x",
                "geschwindigkeit": 1,
                "strecke_id": 11,
                "verkehrsstatus": "xx"
            }
        },
        {
            "properties": {
                "auswertezeit": "y",
                "geschwindigkeit": 2,
                "strecke_id": 22,
                "verkehrsstatus": "yy"
            }
        }
    ],
    "type": "xyz"
}

Результат:

+------------+---------------+----------+--------------+
|auswertezeit|geschwindigkeit|strecke_id|verkehrsstatus|
+------------+---------------+----------+--------------+
|           x|              1|        11|            xx|
|           y|              2|        22|            yy|
+------------+---------------+----------+--------------+

root
 |-- auswertezeit: string (nullable = true)
 |-- geschwindigkeit: long (nullable = true)
 |-- strecke_id: long (nullable = true)
 |-- verkehrsstatus: string (nullable = true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...