как спарк читает паркетник? Имеют значение две настройки: spark.sql.files.maxPartitionBytes и spark.sql.files.openCostInBytes. Нехитрым алгоритмом
Math.min(defaultMaxSplitBytes, Math.max(openCostInBytes, bytesPerCore))
спарк находит, сколько же байт он хочет прочитать в одну партицию, и все файлы, начиная с самых крупных, пытается таким образом разделить. Например, если есть файлы 120 Мб и 260 Мб, второй будет прочитан в партиции 0-127мб, 128-255Мб, остаток от него пойдёт в третью партицию вместе с 0-120Мб+256-260Мб
А вот после этого начинается самое интересное (и тупое, на мой взгляд). Спарк начинает чтение файла с выбранного оффсета в каждой партиции, и пытается выбранным способом получить данные (схема при этом уже определена заранее). Если получается найти хоть одну строку - данные будут в этой партиции RDD, иначе она останется пустая(( Если же кодек читает данные из следующего оффсета - не беда, значит следующая партиция столько записей недополучит. Это приводит к тому, что практически невозможно определить, сколько реально записей будет в каждой партиции, а число самих партиций может быть сильно завышено, и из сотни партиций после чтения данные могут быть только в десяти (а то и в одной-двух)
И вот, тут получается, что данные читает только 31 партиция, то есть, похоже, что файл предоставляет данные только начиная с какого-то смещения и не разбит на блоки