如您所见,我有多个窗口函数(例如计数/总和等)正在阶段(2,3,4,5,....)中执行。我可能有大约15-20个包含窗口函数的阶段。给定一个巨大的数据帧df(以GB为单位),每个窗口函数都会为其添加一个新列。最后,我希望将原始df以及这些新列中的每一个添加到新的组合数据框中。现在,这些功能正在按顺序添加新列,因此整个工作需要很长时间才能完成。
为了更快,我想到了明显的并行执行:
listOfComputationsToPerform.par.foreach{
Apply window function & compute new_dataframe
write new_dataframe to S3/disk
}
Read each dataframe again from S3 and perform joins on a unique key to compute 1 final dataframe
df_list=List[]
listOfComputationsToPerform.par.foreach{
compute new_dataframe => // code to be run in parallel for each i}
df_list = df_list :+ new_dataframe
df_list.reduce(_.join(_, Seq("id")))
我想知道1和2中的哪一个是解决此问题的更好方法。也欢迎其他任何建议。