我不想在从一组jsons创建数据帧时推断模式,但是当我从csv读取时,我无法传递inferSchema = 'false'
。以下是我阅读数据的方法:
df = spark.read.json(r's3://mypath/')
答案 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
个值。