Apache spark 在Spark DataFrame保存到JSON并加载回时,模式列序列会更改

Apache spark 在Spark DataFrame保存到JSON并加载回时,模式列序列会更改,apache-spark,spark-dataframe,Apache Spark,Spark Dataframe,我正在使用spark DataFrames并尝试对相同模式的数据帧执行重复数据消除 将DataFrame保存到JSON之前的模式如下: root |-- startTime: long (nullable = false) |-- name: string (nullable = true) 从JSON文件加载后的DataFrame模式如下: root |-- name: string (nullable = true) |-- startTime: long (nullable =

我正在使用spark DataFrames并尝试对相同模式的数据帧执行重复数据消除

将DataFrame保存到JSON之前的模式如下:

root
 |-- startTime: long (nullable = false)
 |-- name: string (nullable = true)
从JSON文件加载后的DataFrame模式如下:

root
 |-- name: string (nullable = true)
 |-- startTime: long (nullable = false)
我将JSON另存为:

newDF.write.json(filePath)
回首如下:

existingDF = sqlContext.read.json(filePath)
毕竟

existingDF.unionAll(newDF).distinct()
或者除了

newDF.except(existingDF)
由于架构更改,重复数据消除失败

我可以避免这种模式转换吗?
在保存到JSON文件并从JSON文件加载时,是否有办法保留(或强制执行)模式序列?

实施了一种变通方法,将模式转换回我需要的模式:

val newSchema = StructType(jsonDF.schema.map {
  case StructField(name, dataType, nullable, metadata) if name.equals("startTime") => StructField(name, LongType, nullable = false, metadata)
  case y: StructField => y
})
existingDF = sqlContext.createDataFrame(jsonDF.rdd, newSchema).select("startTime", "name")