Я обрабатываю потоковые события разных типов и разных схем в spark с scala, и мне нужно проанализировать их и сохранить их в формате, который легко обрабатывать обычным способом c.
У меня есть датафрейм событий, который выглядит следующим образом:
val df = Seq(("{\"a\": 1, \"b\": 2, \"c\": 3 }", "One", "001") ,("{\"a\": 6, \"b\": 2, \"d\": 2, \"f\": 8 }", "Two", "089"), ("{\"a\": 3, \"b\": 4, \"c\": 6 }", "One", "123")).toDF("col1", "col2", "col3")
, это:
+------------------------------------+--------+------+
| body | type | id |
+------------------------------------+--------+------+
|{"a": 1, "b": 2, "c": 3 } | "One"| 001|
|{"a": 6, "d": 2, "f": 8, "g": 10} | "Two"| 089|
|{"a": 3, "b": 4, "c": 6 } | "Three"| 123|
+------------------------------------+--------+------+
, и я хотел бы превратить его в этот. Мы можем предположить, что все типы «Один» будут иметь одну и ту же схему, и все типы событий будут иметь одни и те же данные, такие как запись «а», которую я хотел бы отобразить в своем собственном столбце
+---+--------------------------------+--------+------+
| a | data | y | z |
+---+--------------------------------+--------+------+
| 1 |{"b": 2, "c": 3 } | "One"| 001|
| 6 |{"d": 2, "f": 8, "g": 10} | "Two"| 089|
| 3 |{"b": 4, "c": 6 } | "Three"| 123|
+------------------------------------+--------+------+