需要帮助优化多个(6) Dataframe 之间的多连接场景。是否有任何方法来优化DF之间的 Shuffle 交换,因为连接键在Join DF之间是相同的。
final_df = DF1.join(DF2,['ID1','ID2','ID3'],'leftouter')
final_df = final_df.join(DF3,['ID1','ID2','ID3'],'leftouter')
final_df = final_df.join(DF4,['ID1','ID2','ID3'],'leftouter')
final_df = final_df.join(DF5,['ID1','ID2','ID3'],'leftouter')
final_df = final_df.join(DF6,['ID1','ID2','ID3'],'leftouter')
任何帮助都很感激,谢谢
1条答案
按热度按时间qij5mzcb1#
我可以看到2个可能的优化在您的情况下,
1.如果你的一些 Dataframe 相对较小,你可以广播这些小的 Dataframe ,假设DF4和DF6很小,你可以这样做:
这可能很棘手,因为小的 Dataframe 根据上下文和集群的大小可能相对不同,所以如果您不确定,可以单独广播每个 Dataframe ,看看是否合适
1.在连接之前,在连接列上重新分区 Dataframe 总是很好的,一个好的地方是当你正在阅读 Dataframe 时,例如:
DF1 = spark.read.xxx.repartition(80,“ID1”,“ID2”,“ID3”)
将80替换为所有不同执行器的核心数量乘以2,3或4,因此如果您的集群中有20个核心,请尝试按40,60或80重新分区,并保留提供最佳结果的那个。
在所有这些之后,您可能会遇到特殊的问题,例如数据倾斜,非常大的 Dataframe ......,您需要单独处理。
希望能帮上忙。