我有一个数据框,它是带有json字符串的json列。下面的例子。一共有3列-a,b,c。 c列是stringType
| a | b | c |
--------------------------------------------------------
|77 |ABC | {"12549":38,"333513":39} |
|78 |ABC | {"12540":38,"333513":39} |
我想将它们放入数据框(枢轴)的列中。下面的示例-
| a | b | 12549 | 333513 | 12540
---------------------------------------------
|77 |ABC |38 |39 | null
|77 |ABC | null |39 | 38
答案 0 :(得分:2)
这可能不是最有效的,因为它必须读取所有json
记录才能推断出模式。如果可以静态定义架构,它应该做得更好。
val data = spark.createDataset(Seq(
(77, "ABC", "{\"12549\":38,\"333513\":39}"),
(78, "ABC", "{\"12540\":38,\"333513\":39}")
)).toDF("a", "b", "c")
val schema = spark.read.json(data.select("c").as[String]).schema
data.select($"a", $"b", from_json($"c", schema).as("s")).select("a", "b", "s.*").show(false)
结果:
+---+---+-----+-----+------+
|a |b |12540|12549|333513|
+---+---+-----+-----+------+
|77 |ABC|null |38 |39 |
|78 |ABC|38 |null |39 |
+---+---+-----+-----+------+