Я использую искру для чтения файла из s3, затем загружаю его в dataframe, а затем я пытаюсь записать его в hdfs как паркет. Дело в том, что когда файл большой (65G), и по какой-то причине я выхожу из памяти ... в любом случае я понятия не имею, почему я получаю память outof, потому что похоже, что данные разделены довольно хорошо.Spark DataFrame сохранить как паркет - из памяти
это sampel моего кода:
val records = gzCsvFile.filter { x => x.length == 31 }.map { x =>
var d:Date = Date.valueOf(x(0))
//var z = new GregorianCalendar();z.getWeekYear
var week = (1900+d.getYear)* 1000 + d.getMonth()*10 + Math.ceil(d.getDate()/7.0).toInt
Row(d, Timestamp.valueOf(x(1)), toLong(x(2)), toLong(x(3)), toLong(x(4)), toLong(x(5)), toLong(x(6)), toLong(x(7)), toLong(x(8)), toLong(x(9)), toLong(x(10)), toLong(x(11)), toLong(x(12)), toLong(x(13)), toLong(x(14)), toLong(x(15)), toLong(x(16)), toLong(x(17)), toLong(x(18)), toLong(x(19)), toLong(x(20)), toLong(x(21)), toLong(x(22)), toLong(x(23)), toLong(x(24)), toLong(x(25)), x(26).trim(), toLong(x(27)), toLong(x(28)), toLong(x(29)), toInt(x(30)), week)
}
var cubeDF = sqlContext.createDataFrame(records, cubeSchema)
cubeDF.write.mode(SaveMode.Overwrite).partitionBy("CREATION_DATE","COUNTRY_ID","CHANNEL_ID").parquet(cubeParquetUrl)
Кто-нибудь есть какие-либо идеи, что происходит?
65GB не очень большой - сколько памяти вы выделяете для исполнителей? –
Около 20GB. Имейте в виду, что прямо сейчас я тестирую его под пряжу. – user1960555
Возможно, для одного файла паркета потребуется больше памяти (перед сжатием). Я постоянно вижу, что промежуточные этапы требуют гораздо больше памяти, чем исходные размеры файлов –