我尝试通过利用一些分区策略优化一段PySpark代码,特别是对两个RDDS进行协同分区,将它们联合起来,并对它们调用reduce操作(它比那,但那是一个很好的初始模型)。
查看以下图表:
img http://reactivesoftware.pl/spark/img/rdd_dependency.png
共分区连接非常有效且很瘦。我的问题是,我怎么知道我的join / reduce是否正确分区?我应该在Spark应用程序UI上看到哪些统计信息?我应该看到哪些性能改进?
答案 0 :(得分:5)
当数据未在Spark中正确共同分区时,系统必须执行随机播放(即将数据移动到新的临时分区以创建必要的连接以执行转换。)
因此两者之间的关键区别在于随机读取和写入时间的数量,即对于狭义的依赖性,您应该看到最小的读取和零写入,而对于宽依赖性,您会看到显着的随机写入。您可以在Spark UI的阶段详细信息中查看随机读取和写入统计信息。
通过消除广泛的依赖关系,您确实看到了两个性能提升:
澄清点:为了聚合数据,减少操作总是随机播放,因此分区策略仅适用于连接。