Проблемы с искрой при чтении паркетных файлов

У меня есть 2 паркетных файла part-00043-0bfd7e28-6469-4849-8692-e625c25485e2-c000.snappy.parquet (это файл с 2017 года, 14 ноября) и part-00199-64714828-8a9e-4ae1-8735-c5102c0a834d-c000.snappy.parquet (это файл детали с 2017 года, 16 ноября) и оба имеют одинаковую схему (которую я проверял схемой печати).

Моя проблема в том, что у меня есть, скажем, 10 столбцов, которые появляются правильно, если я читаю эти 2 файла отдельно, используя Spark. Но если я добавлю этот файл в папку, попробуйте прочитать вместе, общее количество будет правильным (сумма строк из 2 файлов), но из 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 во время чтения выдает исключение Found duplicate column(s) in the data schema and the partition schema: Список столбцов с нулевым значением. И один из столбца фильтра как ambiguous

1 ответ

Оказывается, схемы там, где нет точного совпадения. Существовали различия в регистре (какой-то символ между ними) для имен столбцов, которые были равны нулю. И имена столбцов паркета чувствительны к регистру, так что это вызывало все проблемы. Он пытался читать столбцы, которых там не было вообще.

Другие вопросы по тегам