Я хочу создать несколько настроенных трансформаторов, где я могу перейти к конвейеру. Я нашел способ создать трансформатор, определив класс. То, что я хочу знать, есть ли лучший способ что-то вроде иметь один класс и несколько функций (каждая должна быть преобразователем) и перейти к конвейеру?
Я попытался создать два разных класса для каждого преобразователя и передать в конвейер. Это работает для меня.
# 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. Чего я ожидаю, так это какого-нибудь оптимизированного способа создания нескольких трансформаторов и передачи его в конвейер