在读取镶木地板文件时,这是以下文件数据
|id |name |activegroup|
|1 |abc |[{"groupID":"5d","role":"admin","status":"A"},{"groupID":"58","role":"admin","status":"A"}]|
每个字段的数据类型
根
|--id : int
|--name : String
|--activegroup : String
activegroup列是字符串爆炸功能不起作用。以下是必需的输出
|id |name |groupID|role|status|
|1 |abc |5d |admin|A |
|1 |def |58 |admin|A |
帮助我在Spark Scala最新版本中解析以上内容
首先,您需要提取json模式:
val schema = schema_of_json(lit(df.select($"activeGroup").as[String].first))
一旦获得它,就可以将您的activegroup列(即String from_json
)转换为json(),然后将explode
其转换。
一旦该列为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|
+---+----+-------+-----+------+
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句