Ho la seguente dataframe scintille:Elegante JSON appiattire in Spark
val test = sqlContext.read.json(path = "/path/to/jsonfiles/*")
test.printSchema
root
|-- properties: struct (nullable = true)
| |-- prop_1: string (nullable = true)
| |-- prop_2: string (nullable = true)
| |-- prop_3: boolean (nullable = true)
| |-- prop_4: long (nullable = true)
...
Quello che vorrei fare è appiattirsi questo dataframe in modo che il prop_1 ... prop_n
esistono al livello superiore. Cioè
test.printSchema
root
|-- prop_1: string (nullable = true)
|-- prop_2: string (nullable = true)
|-- prop_3: boolean (nullable = true)
|-- prop_4: long (nullable = true)
...
Esistono diverse soluzioni per problemi simili. Il meglio che posso trovare è posato here. Tuttavia, la soluzione funziona solo se properties
è di tipo Array
. Nel mio caso, le proprietà sono di tipo StructType
.
Un approccio alternativo sarebbe qualcosa di simile:
test.registerTempTable("test")
val test2 = sqlContext.sql("""SELECT properties.prop_1, ... FROM test""")
Ma in questo caso devo specificare esplicitamente ogni riga, e che è poco elegante.
Qual è il modo migliore per risolvere questo problema?