Как зарегистрировать собственные классы или функции в PySpark?

#python-3.x #apache-spark #pyspark

Вопрос:

В последнее время я занимался PySpark, и у меня есть один вопрос, который захватил меня после прочтения этого сообщения в блоге

https://mungingdata.com/apache-spark/registerfunction-injectfunction/

Есть ли способ сделать это в Python? Например, я хотел бы иметь такой класс, как

 MyClass(??):
    """
    A PySpark Class
    """

    return self.read.load(path/to/file)

<somecode here to register it>
 

а затем, после моего сеанса spark, я хотел бы сделать что-то вроде

myDf = spark.MyClass()

возможно ли это в Пыспарке?

Основная мотивация-иметь обертку вокруг PySpark, чтобы каким-то образом обеспечить определенные расширенные функции.

Комментарии:

1. что вас сейчас блокирует ? вы пробовали что-то, и это не помогает ? или вы просто просите общих советов ?

Ответ №1:

Вы работаете на python, поэтому я действительно не понимаю, что вас блокирует.

Вот образец кода для выполнения того, что вы хотите сделать :

 from pyspark.sql import SparkSession


class Singleton(type):
    _instances = {}

    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
        return cls._instances[cls]


class Spark(metaclass=Singleton):
    def __init__(self):
        self._spark = (
            SparkSession.builder.master("yarn").appName(app_name).getOrCreate()
        )

    def __getattr__(self, attr):
        return getattr(self._spark, attr)

    # Add any other method you'd like