Короткий ответ: неважно, искра ленива и не будет делать первый, второй, третий, ... вещи, пока вы не вызовете действие, то есть .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, все в порядке, помните о действиях, которые вы выполняете на промежуточных фреймах данных.