2015-08-17 4 views
1

Я использую искру для чтения файла из 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) 

Кто-нибудь есть какие-либо идеи, что происходит?

+0

65GB не очень большой - сколько памяти вы выделяете для исполнителей? –

+0

Около 20GB. Имейте в виду, что прямо сейчас я тестирую его под пряжу. – user1960555

+1

Возможно, для одного файла паркета потребуется больше памяти (перед сжатием). Я постоянно вижу, что промежуточные этапы требуют гораздо больше памяти, чем исходные размеры файлов –

ответ

1

Вы ударяете эту ошибку: https://issues.apache.org/jira/browse/SPARK-8890

паркета потребление памяти при записи выходных данных из значительно больше, чем мы думали. В скоро появляющемся Spark 1.5 мы переходим к сортировке данных, прежде чем писать большое количество паркетных разделов, чтобы уменьшить потребление памяти.

Смежные вопросы