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

时间:2017-12-12 19:56:13

标签: python json apache-spark pyspark

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

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

2 个答案:

答案 0 :(得分:1)

在寻找一段时间之后,我在docs中发现我可以使用参数'primitivesAsString'

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

这样我至少可以禁止推断类型的推论。但是,我不会为数组和结构避免它。不过,它对我有用。

答案 1 :(得分: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个值。