Прочтите фрейм данных с тем же разделителем, который был сохранен в HDFS

У меня есть общая работа Spark 2.3, которая выполняет множество преобразований и объединений и производит огромный даг. Это оказывает большое влияние на водителя, поскольку dag становится очень сложным.

Чтобы ослабить давление на драйвер, я хотя и занимался контрольными точками некоторых промежуточных фреймов данных, чтобы вырезать даг, но я заметил, что dataframe.checkpoint использует внизу rdds и тратит много времени на сериализацию и десериализацию фрейма данных.

Согласно этому Spark: эффективность контрольной точки фрейма данных по сравнению с явным запись на диск и мой опыт: запись фрейма данных как паркет и чтение его обратно быстрее, чем контрольная точка, но у этого есть недостаток. Dataframe теряет разделитель.

Есть ли способ записать и прочитать фрейм данных и сохранить разделитель? Я использовал ведра при записи фрейма данных, так что когда фрейм данных считывается обратно, он знает разделение данных. Проблема в том, как я могу узнать столбцы, которые фрейм данных имеет в качестве разделителя? Работа Spark, которую я выполняю, носит общий характер, поэтому я не могу жестко запрограммировать столбцы

Спасибо


person Javier S    schedule 23.04.2020    source источник
comment
Итак, что вы имеете в виду под ослаблением давления на водителя?   -  person thebluephantom    schedule 23.04.2020
comment
Когда даг очень велик, кажется, что драйвер тратит слишком много времени на анализ и оптимизацию плана выполнения. Пока это происходит, исполнители ничего не делают. В одном из случаев я заметил, что он может оставаться таким в течение 20 минут, прежде чем исполнители получат некоторую работу, и если я буду настаивать и прочитать некоторые промежуточные фреймы данных, чтобы сократить даг, что исполнители ничего не делают, время ушло.   -  person Javier S    schedule 24.04.2020
comment
Я тоже заметил такие вещи, но мало обсуждаю их.   -  person thebluephantom    schedule 24.04.2020
comment
Дело в том, что, хотя я заметил огромное улучшение производительности, я хотел бы пойти немного дальше и посмотреть, можно ли как-то сохранить разделитель, чтобы избежать лишних перетасовок (иногда следующее преобразование - это соединение с другой таблицей, в которой есть такой же разделитель )   -  person Javier S    schedule 24.04.2020
comment
Это область, которую я исследовал некоторое время назад, но я хотел бы лучше понять задержку. Это странная история, так что давайте посмотрим, кто ответит. В Spark 3 тоже все немного иначе.   -  person thebluephantom    schedule 24.04.2020