我不想在从一组jsons创建数据帧时推断模式,但是当我从csv读取时,我无法传递inferSchema = 'false'
。以下是我阅读数据的方法:
df = spark.read.json(r's3://mypath/')
看了一会后,我在docs发现我可以使用参数'primitivesAsString'
df = spark.read.json(r's3://mypath/', primitivesAsString='true')
这样我至少可以禁止对原始类型进行推理。但是,我不会为数组和结构避免它。不过,它对我有用。
您可以自己创建它,然后告诉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
值。