Spark from_json - StructType und ArrayType
Ich habe einen Datensatz, der kommt, wie XML, und einer der Knoten enthält JSON. Spark liest dies in so einem StringType, so bin ich versucht zu verwenden from_json() zum konvertieren der JSON zu einem DataFrame.
Ich bin in der Lage zu konvertieren einen string mit JSON, aber wie Schreibe ich das schema zu arbeiten mit einem Array?
Strings ohne Array - schön Funktioniert
import org.apache.spark.sql.functions._
val schemaExample = new StructType()
.add("FirstName", StringType)
.add("Surname", StringType)
val dfExample = spark.sql("""select "{ \"FirstName\":\"Johnny\", \"Surname\":\"Boy\" }" as theJson""")
val dfICanWorkWith = dfExample.select(from_json($"theJson", schemaExample))
dfICanWorkWith.collect()
//Results \\
res19: Array[org.apache.spark.sql.Row] = Array([[Johnny,Boy]])
String mit einem Array Kann nicht herausfinden this one out
import org.apache.spark.sql.functions._
val schemaExample2 = new StructType()
.add("", ArrayType(new StructType()
.add("FirstName", StringType)
.add("Surname", StringType)
)
)
val dfExample2= spark.sql("""select "[{ \"FirstName\":\"Johnny\", \"Surname\":\"Boy\" }, { \"FirstName\":\"Franky\", \"Surname\":\"Man\" }" as theJson""")
val dfICanWorkWith = dfExample2.select(from_json($"theJson", schemaExample2))
dfICanWorkWith.collect()
//Result \\
res22: Array[org.apache.spark.sql.Row] = Array([null])
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass Sie nicht einen vollständig qualifizierten json. Ihre json fehlen ein paar Dinge:
Versuchen, Sie zu ersetzen mit:
und Sie erhalten:
als der Funke 2.4 die
schema_of_json
- Funktion hilft:in Ihrem Fall können Sie dann den folgenden code zu analysieren, die array-Sohn-Objekte: