Создайте несколько настраиваемых трансформаторов в pyspark - PullRequest
0 голосов
/ 21 октября 2019

Я хочу создать несколько настроенных трансформаторов, где я могу перейти к конвейеру. Я нашел способ создать трансформатор, определив класс. То, что я хочу знать, есть ли лучший способ что-то вроде иметь один класс и несколько функций (каждая должна быть преобразователем) и перейти к конвейеру?

Я попытался создать два разных класса для каждого преобразователя и передать в конвейер. Это работает для меня.

# SAMPLE DATA 
df = pd.DataFrame({'A': [0,1,2,3,4,5,6],
                    'B': [6,5,4,3,2,1,0],
                    'C': [2,2,2,2,2,2,2] })
df = spark.createDataFrame(df)

class AddMultiply(Transformer):
"""
Create add and multiply functions to transform 
"""

    def __init__(self, inputCol):
         super(AddMultiply, self).__init__()
         self.inputCol = inputCol

   def _transform(self,df):
         df = df.withColumn('AddedColumn', expr("A + B "))
         df = df.withColumn('MultipliedColumn', expr("A * B "))
         return df

class SubDivide(Transformer):
    """
    Create add and multiply functions to transform 
    """

   def __init__(self, inputCol):
        super(SubDivide, self).__init__()
        self.inputCol = inputCol

   def _transform(self,df):
        df = df.withColumn('SubColumn', expr("A - B "))
        df = df.withColumn('DivColumn', expr("A / B "))
        return df

#TRANSFORMER WITH PIPELINE 
add_mul = AddMultiply(inputCol = ["A","B"])
sub_div = SubDivide(inputCol = ["A","B"])
model = Pipeline(stages=[add_mul,sub_div]).fit(df)
Data = model.transform(df)
Data.show()

Ожидаемый результат должен быть еще два столбца с фактическими столбцами, где A + B и A * B. Чего я ожидаю, так это какого-нибудь оптимизированного способа создания нескольких трансформаторов и передачи его в конвейер

...