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

问题描述 投票:1回答:2

我不想在从一组jsons创建数据帧时推断模式,但是当我从csv读取时,我无法传递inferSchema = 'false'。以下是我阅读数据的方法:

df = spark.read.json(r's3://mypath/')
python json apache-spark pyspark
2个回答
1
投票

看了一会后,我在docs发现我可以使用参数'primitivesAsString'

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

这样我至少可以禁止对原始类型进行推理。但是,我不会为数组和结构避免它。不过,它对我有用。


1
投票

您可以自己创建它,然后告诉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值。

© www.soinside.com 2019 - 2024. All rights reserved.