Json使用Spark解析包含Struct of Struct的Array

时间:2017-07-10 06:46:27

标签: json apache-spark pyspark

我的json :(存储在minijson.json中)

{
  "arr": [
    {
      "st1": {},
      "st2": {
        "a": {}
      },
      "val": 0.0,
      "x": "1"
    }
  ]
}

我正在使用spark版本2.1.0来阅读json。

阅读代码:

minidf = spark.read.json("minijson.json")
minidf.printSchema()

输出:

root
 |-- arr: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- val: double (nullable = true)
 |    |    |-- x: string (nullable = true)

我不明白为什么它无法检测到json中存在的st1st2a字段。

请帮忙解决这个问题。

1 个答案:

答案 0 :(得分:0)

如果密钥的空键为"abc": {},则Spark不会创建列。它必须至少包含一个键和值才能创建列。

下面是一个添加键和值

的简单示例
{
"arr": [
  {
    "st1": {
    "name": ""
  },
    "st2": {
      "a": {
        "abc": ""
      }
    },
    "val": 0.0,
    "x": "1"}
  ]
}

将有一个架构

root
 |-- st1: struct (nullable = true)
 |    |-- name: string (nullable = true)
 |-- st2: struct (nullable = true)
 |    |-- a: struct (nullable = true)
 |    |    |-- abc: string (nullable = true)
 |-- val: double (nullable = true)
 |-- x: string (nullable = true)