Heim >Backend-Entwicklung >Python-Tutorial >Verschachteltes JSON kann im Spark-Datenrahmen nicht zerlegt werden
Ich bin neu bei Spark. Ich versuche, den Datenrahmen zu reduzieren, aber es gelingt mir nicht, dies über „Explodieren“ zu tun.
Die ursprüngliche Datenrahmenstruktur ist wie folgt:
id|approvaljson 1|[{"approvertype":"1st line manager","status":"approved"},{"approvertype":"2nd line manager","status":"approved"}] 2|[{"approvertype":"1st line manager","status":"approved"},{"approvertype":"2nd line manager","status":"rejected"}]
Ich muss es in das folgende Schema konvertieren?
id|approvaltype|status 1|1st line manager|approved 1|2nd line manager|approved 2|1st line manager|approved 2|2nd line manager|rejected
Ich habe es versucht
df_exploded = df.withcolumn("approvaljson", explode("approvaljson"))
Aber ich habe den Fehler erhalten:
Cannot resolve "explode(ApprovalJSON)" due to data type mismatch: parameter 1 requires ("ARRAY" or "MAP") type, however, "ApprovalJSON" is of "STRING" type.;
Parsen Sie zuerst die JSON-ähnliche Zeichenfolge in ein Array von Strukturen und teilen Sie das Array dann mit inline
in Zeilen und Spalten auf
df1 = df.withcolumn("approvaljson", f.from_json("approvaljson", schema="array<struct<approvertype string, status string>>")) df1 = df1.select("id", f.inline('approvaljson'))
Ergebnisse
df1.show() +---+----------------+--------+ | ID| ApproverType| Status| +---+----------------+--------+ | 1|1st Line Manager|Approved| | 1|2nd Line Manager|Approved| | 2|1st Line Manager|Approved| | 2|2nd Line Manager|Rejected| +---+----------------+--------+
Das obige ist der detaillierte Inhalt vonVerschachteltes JSON kann im Spark-Datenrahmen nicht zerlegt werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!