我有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日运行的部分文件),两者具有相同的模式(我通过打印模式验证)。
我的问题是,如果我用Spark分别阅读这两个文件,我有10列。但是,如果我把这个文件放在一起尝试读取,总计数是正确的(两个文件中的行的总和),但从第二个文件中,大多数列为空。只有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
在阅读时,它抛出一个异常
Found duplicate column(s) in the data schema and the partition schema:
[即将为空的列列表]
. 其中一个过滤柱为
ambiguous