Pyspark 两个数据帧的spark连接操作

Pyspark 两个数据帧的spark连接操作,pyspark,pyspark-dataframes,Pyspark,Pyspark Dataframes,当df1和df2具有相同的行和 df1和df2没有重复的值 联接操作df1.join(df2)的复杂性是多少? 我的任务是取O(n^2) 是否有可能对数据帧进行排序并使其具有更好的性能? 如果不是这样的话,那么什么方法可以使连接更快?im pyspark?即使df1和df2具有相同的行集,并且如果它们没有分区,为了连接它们,spark必须对连接键上的两个数据帧进行分区。对于spark 2.3以后的版本,sort merge将连接默认的连接工作,这将要求按连接键对两个数据帧进行分区和排序,然后执行

当df1和df2具有相同的行和
df1和df2没有重复的值
联接操作df1.join(df2)的复杂性是多少?
我的任务是取O(n^2)

是否有可能对数据帧进行排序并使其具有更好的性能?
如果不是这样的话,那么什么方法可以使连接更快?im pyspark?

即使df1和df2具有相同的行集,并且如果它们没有分区,为了连接它们,spark必须对连接键上的两个数据帧进行分区。对于spark 2.3以后的版本,sort merge将连接默认的连接工作,这将要求按连接键对两个数据帧进行分区和排序,然后执行连接。这两个数据帧也必须为排序合并合并合并而位于同一位置

是否有可能对数据帧进行排序并使其具有更好的性能?如果不是,那么什么方法可以使连接更快

是的,如果您看到某个特定数据帧在使用同一联接键的联接中被反复使用,则可以在联接键上重新分区该数据帧,并将其缓存以供进一步使用。请参阅下面的链接了解更多详细信息


shuffle hash join是默认的pyspark join吗?不再是了。从Spark2.3开始,如果join键是可排序的,则sort merge join是默认的join。@dailygirlflower请接受答案,或者如果需要更多详细信息,请告诉我。