Tidak dapat menguraikan JSON bersarang dalam bingkai data Spark

WBOY
Lepaskan: 2024-02-11 10:51:03
ke hadapan
446 orang telah melayarinya

无法分解 Spark 数据框中的嵌套 JSON

Kandungan soalan

Saya baru untuk mencetuskan. Saya cuba meratakan kerangka data tetapi gagal melakukannya melalui "meletup".

Struktur kerangka data asal adalah seperti berikut:

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"}]
Salin selepas log masuk

Saya perlu menukarnya kepada skema berikut?

id|approvaltype|status
1|1st line manager|approved
1|2nd line manager|approved
2|1st line manager|approved
2|2nd line manager|rejected
Salin selepas log masuk

Saya telah mencubanya

df_exploded = df.withcolumn("approvaljson", explode("approvaljson"))
Salin selepas log masuk

Tetapi saya mendapat ralat:

Cannot resolve "explode(ApprovalJSON)" due to data type mismatch:
parameter 1 requires ("ARRAY" or "MAP") type, however, "ApprovalJSON"
is of "STRING" type.;
Salin selepas log masuk


Jawapan betul


Mula-mula menghuraikan rentetan seperti json ke dalam tatasusunan struktur dan kemudian gunakan inline untuk memecahkan tatasusunan kepada baris dan lajur

df1 = df.withcolumn("approvaljson", f.from_json("approvaljson", schema="array<struct<approvertype string, status string>>"))
df1 = df1.select("id", f.inline('approvaljson'))
Salin selepas log masuk

Hasil

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|
+---+----------------+--------+
Salin selepas log masuk

Atas ialah kandungan terperinci Tidak dapat menguraikan JSON bersarang dalam bingkai data Spark. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan