Как создать копию кадра данных в pyspark?Python

Программы на Python
Ответить
Anonymous
 Как создать копию кадра данных в pyspark?

Сообщение Anonymous »

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

Код: Выделить всё

>>> X = spark.createDataFrame([[1,2], [3,4]], ['a', 'b'])
>>> schema_new = X.schema.add('id_col', LongType(), False)
>>> _X = X.rdd.zipWithIndex().map(lambda l: list(l[0]) + [l[1]]).toDF(schema_new)
Проблема в том, что в приведенной выше операции схема X изменяется на месте. Поэтому, когда я печатаю X.columns, я получаю

Код: Выделить всё

>>> X.columns
['a', 'b', 'id_col']
но значения в X остаются прежними

Код: Выделить всё

>>> X.show()
+---+---+
|  a|  b|
+---+---+
|  1|  2|
|  3|  4|
+---+---+
Чтобы избежать изменения схемы X, я попробовал создать копию X тремя способами:
- с помощью методов copy и deepcopy из модуля copy
- просто с помощью _X = X

Методы копирования завершились неудачно и вернули

Код: Выделить всё

RecursionError: maximum recursion depth exceeded
Метод присваивания также не работает

Код: Выделить всё

>>> _X = X
>>> id(_X) == id(X)
True
Поскольку их идентификаторы одинаковы, создание дублирующего фрейма данных здесь не очень помогает, а операции, выполненные с _X, отражаются в X.

Таким образом, мой вопрос на самом деле двоякий
  • как изменить внешнюю схему (то есть без внесения каких-либо изменений в X)?
  • и, что более важно, как создать дубликат кадра данных pyspark?
Примечание:

Этот вопрос является продолжением этого поста

Подробнее здесь: https://stackoverflow.com/questions/522 ... in-pyspark
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»