Scala Spark在读取拼花文件时遇到的问题

Scala Spark在读取拼花文件时遇到的问题,scala,apache-spark,parquet,apache-spark-dataset,Scala,Apache Spark,Parquet,Apache Spark Dataset,我有两个拼花地板零件文件part-00043-0bfd7e28-6469-4849-8692-e625c25485e2-c000.snappy.parquet(是2017年11月14日运行的零件文件)和part-00199-64714828-8a9e-4ae1-8735-c5102c0a834d-c000.snappy.parquet (是2017年11月16日运行的部分文件),并且两者具有相同的模式(我通过打印模式验证了这一点) 我的问题是,我有,比如说10列,如果我使用Spark分别阅读这2

我有两个拼花地板零件文件
part-00043-0bfd7e28-6469-4849-8692-e625c25485e2-c000.snappy.parquet
(是2017年11月14日运行的零件文件)和
part-00199-64714828-8a9e-4ae1-8735-c5102c0a834d-c000.snappy.parquet
(是2017年11月16日运行的部分文件),并且两者具有相同的模式(我通过打印模式验证了这一点)

我的问题是,我有,比如说10列,如果我使用Spark分别阅读这2个文件,它们会正确地出现。但若我把这个文件放在一起,那个么总计数是正确的(两个文件的行数之和),但第二个文件中的大多数列都是空的。只有2-3列具有正确的值(值存在于文件中,因为如果我单独读取,它会正确显示)。我在这里错过了什么?以下是我用于测试的代码:

def initSparkConfig: SparkSession = {

    val sparkSession: SparkSession = SparkSession
      .builder()
      .appName("test")
      .master("local")
      .getOrCreate()

    sparkSession.sparkContext.hadoopConfiguration.set("mapreduce.fileoutputcommitter.algorithm.version", "2")
    sparkSession.sparkContext.getConf.set("spark.hadoop.parquet.enable.summary-metadata", "false")
    sparkSession.sparkContext.getConf.set("spark.sql.parquet.mergeSchema", "false")
    sparkSession.sparkContext.getConf.set("spark.sql.parquet.filterPushdown", "false")
    sparkSession.sparkContext.getConf.set("spark.sql.hive.metastorePartitionPruning", "true")

    sparkSession
  }

sparkSession = initSparkConfig
sparkSession.read.parquet("/test_spark/").createOrReplaceTempView("table")
sparkSession.sql("select * from table").show 
更新:

如果我分别读取这两个文件并进行并集和读取,所有列都会被填充而不会出现任何问题

更新2:


如果我在读取时使
mergeSchema=true
,它会抛出一个异常
在数据架构和分区架构中发现重复的列:
[即将为空的列列表]。其中一个过滤器列为
不明确

,结果显示模式不完全匹配。列名的大小写(中间的一些字符)存在差异,它们的大小写为null。拼花地板的列名是区分大小写的,所以这导致了所有的问题。它试图阅读根本不存在的专栏