Вот немного упрощенный пример, но он даст вам направление для настройки логики на основе ваших собственных спецификаций:
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)