我有一个pysparkDataframe,使用相同的Dataframe创建新的Dataframe,并在最后连接它们。
例如:
source_dataframe = spark.createDataFrame(rdd, schema).cache()
df1 = function1(source_dataframe)
df2 = function2(source_dataframe)
df3 = function3(source_dataframe)
df4 = function4(source_dataframe)
每个函数都是相互独立的,最后将它们连接起来以创建最终的Dataframe。
final_df = df1.join(df2, [id]).join(df3, [id]).join(df4, [id])
在pyspark中有没有一种方法可以并行运行以上所有函数,因为它们彼此独立?或者spark自动并行运行,因为它们彼此独立?
任何帮助都将不胜感激。谢谢。
1条答案
按热度按时间hujrc8aj1#
所以spark是惰性的,除非在函数中应用一个动作,否则不会对任何东西进行求值。每当你应用一个变换时,它只被添加到dag中,当你在最后的df上触发一个动作时,所有的东西都会被计算。
因此,不需要同时执行这些转换。spark在分发时为您执行。
另一点是,由于spark是分布式的,工作负载被分配到多个执行器上,如果您试图利用python的多处理功能,它将增加驱动程序节点上的负载,这可能导致oom问题或执行缓慢。