Согласно AlterTable/PartitionConcatenate:
Если таблица или раздел содержит много мелких файлов конфигурации или ORC файлов, то вышеприведенная команда будет объединять их в более крупные файлы. В случае RCFile слияние происходит на уровне блока, тогда как для файлов ORC слияние происходит на уровне полосы, что позволяет избежать накладных расходов на декомпрессию и декодирование данных.
Также :
Тело ORC файлов состоит из ряда полос. Полосы: большие (обычно ~ 200 МБ) и независимы друг от друга и часто обрабатываются различными задачами. Определяющим признаком для форматов хранения столбцов является то, что данные для каждого столбца хранятся отдельно и что чтение данных из файла должно быть пропорционально количеству прочитанных столбцов . В файлах ORC каждый столбец хранится в нескольких потоках, которые хранятся рядом друг с другом в файле. Например, целочисленный столбец равен , представленному как два потока PRESENT, который использует один бит с записью значения , если значение не является нулевым, и DATA, который записывает ненулевые значения. Если все значения столбца в полосе не равны нулю, поток PRESENT не указан на полосе. Для двоичных данных ORC использует три потока PRESENT, DATA и LENGTH, которые сохраняют длину каждого значения. Детали каждого типа будут представлены в следующих статьях: .
Для реализации в Спарк вы можете использовать SparkSQL с помощью искрового Контекст:
scala> val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
scala> sqlContext.sql("Your_hive_query_here")