Oke jadi saya mendapatkan string Json besar dari panggilan API, dan saya ingin menyimpan beberapa string itu ke Cassandra. Saya mencoba mengurai string Json menjadi struktur seperti tabel, tetapi hanya dengan beberapa bidang. Skema keseluruhan terlihat seperti ini:

printSchema()

Dan saya ingin struktur tabel saya menggunakan bidang regnum, tanggal dan nilai. Dengan sqlContext.read.json(vals).select(explode('register) as 'reg).select("reg.@attributes.regnum","reg.data.date","reg.data.value").show saya bisa mendapatkan tabel seperti ini:

table

Tetapi seperti yang Anda lihat, bidang tanggal dan nilai adalah array. Saya ingin memiliki satu elemen per catatan, dan menduplikasi regnum yang sesuai untuk setiap catatan. Bantuan apa pun sangat dihargai.

0
third_eye 10 November 2017, 01:54

1 menjawab

Jawaban Terbaik

Anda dapat mentransmisikan DataFrame Anda ke Dataset lalu flatMap di atasnya.

 df.select("reg.@attributes.regnum","reg.data.date","reg.data.value")
   .as[(Long, Array[String], Array[String])]
   .flatMap(s => s._2.zip(s._3).map(p => (s._1, p._1, p._2)))
2
Thang Nguyen 10 November 2017, 04:38