2016-11-03 2 views
3

Я пишу этого кодискры сохранять и читать на паркет HDFS

val inputData = spark.read.parquet(inputFile) 
spark.conf.set("spark.sql.shuffle.partitions",6) 
val outputData = inputData.sort($"colname") 
outputData.write.parquet(outputFile) //write on HDFS 

Если я хочу, чтобы прочитать содержимое файла «OUTPUTFILE» из HDFS, я не нахожу такое же количество перегородок и данные не сортируются. Это нормально?

Я использую Спарк 2.0

+0

Как вы проверяете количество разделов и читаете содержимое файла? Вы используете 'show()' или 'take()' для отображения содержимого? –

ответ

-3

Вы должны использовать repartition() вместо этого. Это будет писать паркет файл, как вы хотите его:

outputData.repartition(6).write.parquet("outputFile") 

Тогда это было бы то же самое, если вы попытаетесь прочитать его обратно.

Паркет сохраняет порядок рядов. Вы должны использовать take() вместо show(), чтобы проверить содержимое. take(n) возвращает первые строки n, и способ, которым он работает, - сначала прочитать первый раздел, чтобы получить представление о размере раздела, а затем получить оставшиеся данные в пакетах.

+0

Как это помогает, если OP хочет получить глобально отсортированный результат? –

+0

OP заинтересована в том, чтобы читать с тем же разделением. Этот ответ не решает проблему. – Tim

+0

Этот ответ не отвечает на вопрос ОП. – eliasah

1

Это неудачный недостаток искры. В то время как write.parquet сохраняет файлы как part-00000.parquet, part-00001.parquet, ..., он сохраняет информацию о разделе и не гарантирует, что part-00000 на диске будет считан как первый раздел.

Мы добавили функциональность для нашего проекта в: a) чтение разделов в том же порядке (это включает в себя выполнение некоторых небезопасных разделов и сортировки разделов на основе содержащегося имени файла) и b) сериализовывать разделители на диск и читать их назад.

Насколько я знаю, вы ничего не можете сделать на складе Spark на данный момент, чтобы решить эту проблему. Я с нетерпением жду разрешения в будущих версиях Spark!

Редактировать: Опыт работы в Spark 1.5.x и 1.6.x. Если есть способ сделать это в родной Spark с 2.0, пожалуйста, дайте мне знать!

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