【发布时间】:2018-05-26 14:35:00
【问题描述】:
我不想在从一组 json 创建数据帧时推断架构,但我不能像从 csv 读取时那样传递 inferSchema = 'false'。以下是我读取数据的方式:
df = spark.read.json(r's3://mypath/')
【问题讨论】:
标签: python json apache-spark pyspark
我不想在从一组 json 创建数据帧时推断架构,但我不能像从 csv 读取时那样传递 inferSchema = 'false'。以下是我读取数据的方式:
df = spark.read.json(r's3://mypath/')
【问题讨论】:
标签: python json apache-spark pyspark
找了一会儿,在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 值。
【讨论】: