当df1和df2具有相同的行并且
df1和df2没有重复值
联接操作df1.join(df2)的复杂性是什么?
我的问题是要拿O(n ^ 2)
是否可以同时对数据框进行排序并使其具有更好的性能? 如果不是,那么通过pyspark更快地加入联接的方法是什么?
答案 0 :(得分:0)
即使df1和df2具有相同的行集,并且未进行分区,对于连接它们,spark也必须对join键上的两个数据帧进行分区。对于Spark 2.3及更高版本,sort-merge联接默认的联接主力,这将要求两个数据帧都通过联接键进行分区和排序,然后执行联接。这两个数据帧也必须位于同一位置才能进行排序合并联接。
是否可以同时对数据框进行排序并使其具有更好的性能?如果不是,那么通过pyspark更快地加入联接的方法是什么?
是的,如果看到使用相同的联接键一次又一次地在联接中使用特定的数据帧,则可以在联接键上对该数据帧重新分区,并将其缓存以备将来使用。请参阅下面的链接以获取更多详细信息
https://deepsense.ai/optimize-spark-with-distribute-by-and-cluster-by/