python3.x—以高性能和面向对象的方式编写spark etl作业

wn9m85ua  于 2021-05-27  发布在  Spark
关注(0)|答案(0)|浏览(223)

在spark工作中实现高绩效的概念性问题。
在etl作业中,我正在从数据源(s3或数据库或原始文件)提取阶段创建一个Dataframe,
即。 df = extract(configs) 然后在变换阶段,即。 df_transform = transform(df, configs) ,我正在使用多种python方法来转换我的Dataframe。
即。 cleaning(df) , setup_different_conditional_edits(df) , windowing_function_transformations(df) , other_statestical_tranformations(df) 所有转换函数在应用转换后都将返回df(i、 e.Pandas风格)

def transform(df, config):
  df = cleaning(df)
  df = setup_different_conditional_edits(df)
  df = windowing_function_transformations(df)
  df = other_statestical_tranformations(df)

  return df

现在我正在创建的Dataframe extract(configs) 相当大(~10-100GB)。假设我有足够的内存和计算资源,在两个python函数之间传递巨大的Dataframe是一种好的做法吗?或者使用自定义项是最好的选择?
另外,如果我使用的是python类,那么将spark dataframe声明为类示例变量是一种好的做法吗?
i、 e.(概念)

class Extract(object):
    def __init__(configs):
        """ declaring configs as instance variable """
        self.configs = configs

    def run(self):
        """ All Extraction Methods """

        return df

class Transform(object):
    def __init__(df):
        """ passing df as instance variable """
        self.df = df

    def run(self):
        """ All Transformation Methods """
        self.df = cleaning()
        self.df = setup_different_conditional_edits()
        self.df = windowing_function_transformations()
        self.df = other_statestical_tranformations()

        return self.df

class Load(object):
    def __init__(df):
        """ passing df as instance variable """
        self.df = df

    def run():
        """ Logic for loading transformed df """

        return True

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题