Быстрее ли вызывать функции Spark одновременно, а не вызывать их отдельно? - PullRequest
0 голосов
/ 29 октября 2019

Интересно, быстрее или эффективнее вызывать функции Spark (PySpark) одновременно, чем вызывать их отдельно?

Например:

final_df = data_frame1.doFirstThing() \
                      .doSecondThing() \
                      .doThirdThing() \
                      .doFourthThing()

против

data_frame2 = data_frame1.doFirstThing()
data_frame3 = data_frame2.doSecondThing()
data_frame4 = data_frame3.doThirdThing()
final_df = data_frame4.doFourthThing()

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

1 Ответ

1 голос
/ 29 октября 2019

Короткий ответ: неважно, искра ленива и не будет делать первый, второй, третий, ... вещи, пока вы не вызовете действие, то есть .write или .collect или подобное. До этого он просто записывает то, что вы просили сделать.

Это, как говорится, также зависит от того, как вы отлаживаете. Когда вы говорите «это затрудняет отладку», если вы имеете в виду, что хотите проверять имена схем и столбцов между операциями, это нормально. Однако, если вы звоните data_frame.take или data_frame.show между шагами, вы действительно можете выстрелить себе в ногу. Spark иногда может быть очень умным, например, если вы выполните df.select(df.col_a - df.col_b).where(df.col_a > df.col_b), spark изменит порядок этих операций, потому что нет смысла выполнять вычисления, которые вы просто собираетесь отбросить. Если вы материализуете частичный результат, спарк может не иметь возможности оптимизировать столько, сколько мог бы, если бы у него был полный запрос, также спарк не всегда кэширует промежуточные результаты, поэтому эти вычисления, возможно, придется повторять при выполнении вашего окончательного запроса.

TLDR, все в порядке, помните о действиях, которые вы выполняете на промежуточных фреймах данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...