我有两个大型Spark数据框。我在一个共同的专栏文章中加入了他们:
df_joined = df1.join(df2.select("id",'label'), "id")
我得到了结果,但是当我想使用df_joined时,它太慢了。据我所知,我们需要对df1和df2重新分区,以防止df_joined进行大量分区。所以,即使我更改了分区数,
df1r = df1.repartition(1)
df2r = df2.repartition(1)
df_joined = df1r.join(df2r.select("id",'label'), "id")
仍然无法正常工作。 任何想法吗?
答案 0 :(得分:0)
Spark为RDD / DataFrame的每个分区运行1个并发任务(不超过集群中的核心数)。
如果您的集群有20个核心,则至少应有20个分区(实际上是2到3倍)。另一方面,单个分区通常不应超过128MB。
所以,而不是下面两行,它将数据帧重新划分为1个分区:
df1r = df1.repartition(1)
df2r = df2.repartition(1)
基于“ id”列(使用键)将数据重新分区为n个分区。 (n取决于数据大小和集群中的内核数。)
df1r = df1.repartition(n, "id")
df2r = df2.repartition(n, "id")