在JSON中读取字典

Mor*_*ive 3 scala apache-spark apache-spark-sql

这是我的JSON

[{"dict": {"key": "value1"}}, {"dict": {"key": "value2"}}]
Run Code Online (Sandbox Code Playgroud)

这是我的解析代码:

val mdf = sparkSession.read.option("multiLine","true").json("multi2.json")
mdf.show(false)
Run Code Online (Sandbox Code Playgroud)

这输出:

+--------+
|dict    |
+--------+
|[value1]|
|[value2]|
+--------+
Run Code Online (Sandbox Code Playgroud)

我想看看名称 - 价值对?键和值.

我该怎么做呢?

谢谢

hi-*_*zir 5

如果你只想扩大数据select dict.*(注意选项名为multiline没有multiLine):

val df = spark.read.option("multiline", "true").json("multi2.json")
df.select($"dict.*").show

// +------+
// |   key|
// +------+
// |value1|
// |value2|
// +------+
Run Code Online (Sandbox Code Playgroud)

如果您想将其视为字典,请提供架构:

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)|
// +------------------+
Run Code Online (Sandbox Code Playgroud)

如果你想要每行一对,只需爆炸结果:

import org.apache.spark.sql.functions._

dfm.select(explode(col("dict"))).show
// +---+------+
// |key| value|
// +---+------+
// |key|value1|
// |key|value2|
// +---+------+
Run Code Online (Sandbox Code Playgroud)