Python: Расширить метод класса и использовать замещенный экземпляр класса - PullRequest
0 голосов
/ 16 июня 2020

Я хочу расширить функцию чтения / записи pyspark. sql .DataFrame для нужд моего собственного проекта. Для этого я создаю следующее

import pyspark.sql

class DataFrame(pyspark.sql.DataFrame):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def write(self, format="parquet", version=True):
        if format=="some_format":
            # do something
            super().write.format(format).save(path)

Проблема в том, что в коде мы создаем экземпляр объекта суперкласса, подобного этому data = spark.range(0, 5) Как мне go преобразовать фрейм данных Spark для моего пользовательского чтения / write метод с минимальными изменениями. Возможно ли это

1 Ответ

0 голосов
/ 18 июня 2020

Вы можете изменить класс существующего объекта следующим образом:

data = spark.range(0, 5)
data.__class__ = DataFrame   # _your_ DataFrame

Для простых расширений родительского класса этот должен работать нормально. В общем, есть всевозможные предостережения для взлома членства в классе вроде этого; например, для этой переменной не был вызван ваш собственный инициализатор.

...