Сначала вам нужно извлечь схему json:
val schema = schema_of_json(lit(df.select($"activeGroup").as[String].first))
Получив ее, вы можете преобразовать столбец вашей активной группы, который является строкой, в json (from_json
), и затем explode
it.
Если столбец равен json, вы можете извлечь его значения с помощью $"columnName.field"
val dfresult = df.withColumn("jsonColumn", explode(
from_json($"activegroup", schema)))
.select($"id", $"name",
$"jsonColumn.groupId" as "groupId",
$"jsonColumn.role" as "role",
$"jsonColumn.status" as "status")
Если вы хотите извлечь целое json и с именами элементов все в порядке, вы можете использовать *, чтобы сделать это:
val dfresult = df.withColumn("jsonColumn", explode(
from_json($"activegroup", schema)))
.select($"id", $"name", $"jsonColumn.*")
РЕЗУЛЬТАТ
+---+----+-------+-----+------+
| id|name|groupId| role|status|
+---+----+-------+-----+------+
| 1| abc| 5d|admin| A|
| 1| abc| 58|admin| A|
+---+----+-------+-----+------+