Я использую Spark 1.6.1 и все еще новичок в мире Spark. Я играю с сохранением файла в формате ORC.
Я пытаюсь разобрать относительно большой текстовый файл (8 ГБ) в ORC. Файл обычно довольно широкий, т.е. 200+ столбцов.
Типы столбцов являются базовыми: Int, String, Date. Я разбираю все строки, затем выполняю persist() и сохраняю в файл.
Вот основной код:
val schema = StructType(
myTableColumns.map(
c => StructField(
//Field descriptions ~200 fields
)))
val rowRDD = rddProcessedLines.map(line => {
Row.fromSeq(line)
})
val fileSchemaRDD = hiveContext.createDataFrame(rowRDD, schema)
fileSchemaRDD.registerTempTable("output_table_name")
fileSchemaRDD.write.orc("output_folder")
Проблема в том, что производительность довольно низкая. Это хуже, чем любой импорт в реляционную базу данных из того же текстового файла.
Я пытался переключаться между компрессорами Snappy и LZF, но особого выигрыша здесь не было. Я также играл с объемом памяти для узлов и количеством ядер, не лучше. Затем я начал изменять размер буфера и т. д. для сжатия. Я вижу, что производительность резко падает для большего количества столбцов. Может кто подскажет где смотреть? Может ли кто-нибудь указать на полезные темы об оптимизации сохранения файлов ORC?