Я пытаюсь разобрать некоторые неструктурированные JSON данные в несколько строк, используя искру. Я просмотрел много примеров, но ни один из них, похоже, не подходит для этого сценария. Я не уверен, что мои JSON данные недействительны или я делаю это неправильно.
Я использую spark 2.4, а вот исходный кадр данных:
+------+---------------------------------------------------------------------------------------------------------------------------+
|userId|values
|
+------+---------------------------------------------------------------------------------------------------------------------------+
|1 |[{"mouseCode":0,"target":"TR#test-15110>TD>DIV>SPAN>LABEL"},{"keyCode":96,"target":"INPUT#next-button[value='Save Data']"}]|
|2 |[{"keyCode":53,"target":"TR#box-15110>TD>DIV>SPAN>LABEL"}] |
+------+---------------------------------------------------------------------------------------------------------------------------+
Я бы например, результирующий фрейм данных выглядит следующим образом:
+------+---------------------------------------------------------------------------------------------------------------------------+
|userId|values
|
+------+---------------------------------------------------------------------------------------------------------------------------+
|1 |{"mouseCode":0,"target":"TR#test-15110>TD>DIV>SPAN>LABEL"}|
|1 |{"keyCode":96,"target":"INPUT#next-button[value='Save Data']"}|
|2 |{"keyCode":53,"target":"TR#box-15110>TD>DIV>SPAN>LABEL"} |
+------+---------------------------------------------------------------------------------------------------------------------------+
Итак, это взрыв, когда мы не знаем, сколько возможных значений может существовать, но схема фрейма исходных данных выглядит следующим образом:
root
|-- userId: integer (nullable = false)
|-- values: string (nullable = true)
df.select(explode($"values").as("explodedValues"))
Поскольку это строка, она не будет работать, поскольку не знает, как ее разбить. Итак, я думаю, мне нужно преобразовать его в список / массив этих объектов? Я попытался создать UDF, который разделяется на «[}, {]», но вместо этого он разделяется на каждую запятую.
Любая помощь или руководство в правильном направлении очень ценится. Спасибо.