这是我的 JSON
[{"dict": {"key": "value1"}}, {"dict": {"key": "value2"}}]
这是我的解析代码:
val mdf = sparkSession.read.option("multiLine","true").json("multi2.json")
mdf.show(false)
这输出:
+--------+
|dict |
+--------+
|[value1]|
|[value2]|
+--------+
我想查看名称-值对?键和值。
我该怎么做呢?
谢谢
最佳答案
如果您只想扩展数据 select dict.*
(请注意,该选项名为 multiline
而不是 multiLine
):
val df = spark.read.option("multiline", "true").json("multi2.json")
df.select($"dict.*").show
// +------+
// | key|
// +------+
// |value1|
// |value2|
// +------+
如果您想将其视为字典,只需提供架构:
import org.apache.spark.sql.types._
val schema = StructType(Seq(
StructField("dict", MapType(StringType, StringType))
))
val dfm = spark.read
.schema(schema)
.option("multiline", "true")
.json("multi2.json")
dfm.show
// +------------------+
// | dict|
// +------------------+
// |Map(key -> value1)|
// |Map(key -> value2)|
// +------------------+
如果你想要每行一对,只需分解结果:
import org.apache.spark.sql.functions._
dfm.select(explode(col("dict"))).show
// +---+------+
// |key| value|
// +---+------+
// |key|value1|
// |key|value2|
// +---+------+
关于scala - 在 JSON 中读取字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49656889/