Если кадры данных в Spark являются неизменяемыми, почему мы можем изменить их с помощью таких операций, как withColumn ()? - PullRequest
0 голосов
/ 19 ноября 2018

Вероятно, это глупый вопрос, возникший из-за моего невежества.Я работаю над PySpark уже несколько недель, и у меня нет большого опыта программирования.

Насколько я понимаю, в Spark RDD, Dataframes и Datasets являются неизменяемыми, что, как я понимаю, означает, что вы не можете изменять данные.Если да, то почему мы можем редактировать существующий столбец Dataframe, используя withColumn ()?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

В соответствии с архитектурой Spark DataFrame построен поверх RDD, которые являются неизменяемыми по своей природе, следовательно, кадры данных также являются неизменными по своей природе.

Что касается withColumn или любой другой операции по этому вопросу, когда вы применяете такие операции к фреймам данных, он генерирует новый фрейм данных вместо обновления существующего фрейма данных.

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

df = df.withColumn()

Он сгенерирует другой фрейм данных и присвоит ему ссылку "df".

Чтобы проверить то же самое, вы можете использовать id() метод rdd, чтобы получить уникальный идентификатор вашего фрейма данных.

df.rdd.id()

даст вам уникальный идентификатор для вашего фрейма данных.

Надеюсь, приведенное выше объяснение поможет.

С уважением,

Neeraj

0 голосов
/ 19 ноября 2018

Вы не; в документации явно сказано

Возвращает новый набор данных путем добавления столбца или замены существующего столбца с тем же именем.

Если вы сохраните переменную, ссылающуюся на фрейм данных, который вы назвали withColumn, у него не будет нового столбца.

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