在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
暂无答案!
目前还没有任何答案,快来回答吧!