Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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
Python 如何在从json创建数据帧时不推断模式?_Python_Json_Apache Spark_Pyspark - Fatal编程技术网

Python 如何在从json创建数据帧时不推断模式?

Python 如何在从json创建数据帧时不推断模式?,python,json,apache-spark,pyspark,Python,Json,Apache Spark,Pyspark,我不希望在从一组JSON创建数据帧时推断模式,但我不能像从csv读取时那样传递inferSchema='false'。以下是我读取数据的方式: df = spark.read.json(r's3://mypath/') 在寻找了一段时间后,我在中发现我可以使用参数“primitivesAsString” df = spark.read.json(r's3://mypath/', primitivesAsString='true') 这样我就可以禁止推理,至少对于primite类型是这样。但是

我不希望在从一组JSON创建数据帧时推断模式,但我不能像从csv读取时那样传递
inferSchema='false'
。以下是我读取数据的方式:

df = spark.read.json(r's3://mypath/')

在寻找了一段时间后,我在中发现我可以使用参数“primitivesAsString”

df = spark.read.json(r's3://mypath/', primitivesAsString='true')

这样我就可以禁止推理,至少对于primite类型是这样。但是,对于数组和结构,我不会回避它。不过,它对我仍然有效。

您可以自己创建模式,然后告诉Spark使用它,而不是推断模式。3列不同类型的小示例:

schema = StructType([StructField('name', StringType(), True),
                     StructField('datetime', TimestampType(), True)
                     StructField('age', IntegerType(), True)])

df = spark.read.schema(schema).json(r's3://mypath/')

这只有在您事先知道JSON文件的结构时才有效。但是,如果有多个具有不同结构的文件,则可以通过使用相同的模式进行读取将它们合并在一起。没有某些列的文件将只具有这些列的
null
值。

问题是,我不知道会发生什么,我的意思是,我不知道json中列的名称。@Ifvv:是的,只有知道要使用哪些列时,这才有效。如果json文件包含感兴趣的不同列,则可以在同一模式中指定所有列。对于缺少列的列,该值将为null。