Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Spark使用包含Struct的Struct的数组进行Json解析_Json_Apache Spark_Pyspark - Fatal编程技术网

使用Spark使用包含Struct的Struct的数组进行Json解析

使用Spark使用包含Struct的Struct的数组进行Json解析,json,apache-spark,pyspark,Json,Apache Spark,Pyspark,my json:(存储在minijson.json中) 我正在使用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

my json:(存储在minijson.json中)

我正在使用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中存在的
st1
st2
a
字段


请帮忙解决这个问题

Spark不会创建列,如果该键有空键,如
“abc”:{}
它必须至少有一个键和值才能创建列

下面是添加键和值的简单示例

{
"arr": [
  {
    "st1": {
    "name": ""
  },
    "st2": {
      "a": {
        "abc": ""
      }
    },
    "val": 0.0,
    "x": "1"}
  ]
}
Wich将有一个模式作为

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)

对我知道这一点。甚至我也尝试用空数组viz替换空键<代码>“abc”:{}到<代码>“abc”:[]并且它可以工作。但问题是,我需要对我发布的现有json有一个解决方案。你可以自己设置模式。谢谢@Assaf,但这里预定义模式的问题是,对象
st1
a
可以有任何级别的嵌套,我们无法控制发件人的架构。@desaiankitb您可以尝试使用外部工具提取json架构,然后手动将其转换为spark架构
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)