2017-10-16 3 views
0

言ってやるが、私はdf_3some_colで仕切られるべきと50個のパーティションが、私の実験は、少なくとも最後の条件が真ではないことを示していると考え列some_col同じパーティショニングで2つのDataFramesを結合した後、Spark DataFrameを持つプロパティはありますか?

df_1 = df_1.repartition(50, 'some_col') 
df_2 = df_2.repartition(50, 'some_col') 

df_3 = df_1.join(df_2, on='some_col') 

を持つ2つのスパークデータフレームを持っています。それはなぜ起こるのですか? 「df_3もsome_colで仕切られ、50個のパーティションを持つべきである」という

df_3 = df_3.repartition(50, 'some_col') 
+0

をなぜあなたは 'df_3'は50個のパーティションを持つべきだと思いますか? joinの直後に 'df_3.rdd.getNumPartitions()'と書かれているものは何ですか? – Mariusz

+0

'df_3.rdd.getNumPartitions()'が 'spark.default.parallelism'と等しいことがわかりました。それは奇妙に見えます..なぜそれは起こるのですか?同じパーティション内で結合する方がはるかに簡単です! – AlexanderLedovsky

+0

これは常に 'spark.sql.shuffle.partitions'と同じです。詳しくはこちらをご覧ください:https://stackoverflow.com/questions/41359344/why-is-the-number-of-partitions-after-groupby-200 -why-is-this-200-not-some-othe – Mariusz

答えて

2

条件の後に起こることができ、時間のかかる操作(再パーティショニングまたは再場所)の面で何が起こる

のみとなりますdf_1とdf_2が "some_col"と同じ値を持つパーティションを持つ場合、つまり、df_1に2つのパーティションがある場合:[(1,2)]、[(3,1)、(3,7)](some_colの値は1、3)なら、df_2はsome_col値1,3を持つパーティションを持つ必要があります。その場合、df_1とdf_2を結合すると、df_1またはdf_2と同じ数のパーティションでdf_3が生成されます。

それ以外の場合は、デフォルトの200個のパーティションを作成し、結合操作全体をシャッフルしようとします。明確にするため

次の例で試すことができます。

rdd1 = sc.parallelize([(1,2), (1,9), (2, 3), (3,4)]) 
df1 = rdd1.toDF(['a', 'b']) 
df1 = df1.repartition(3, 'a') 
df1.rdd.glom().collect() #outputs like: 
>> [[Row(a=2,b=3)], [Row(a=3,b=4)], [Row(a=1,b=2), Row(a=1,b=9)]] 

df1.rdd.getNumPartitions() 
>>3 

rdd2 = sc.parallelize([(1,21), (1,91), (2, 31), (3,41)]) 
df2 = rdd2.toDF(['a', 'b']) 
df2 = df2.repartition(3, 'a') 
df2.rdd.glom().collect() #outputs like: 
>> [[Row(a=2,b=31)], [Row(a=3,b=41)], [Row(a=1,b=21), Row(a=1,b=91)]] 

df2.rdd.getNumPartitions() 
>>3 


df3 = df1.join(df2, on='a') 
df3.rdd.glom().collect() #outputs like: 
>> [[Row(a=2,b=3,b=31)], [Row(a=3,b=4,b=41)], [Row(a=1,b=2,b=21), Row(a=1,b=9,b=91)]] 
df21.rdd.getNumPartitions() 
>>3 
+0

Thx!実際には、はるかに明確になっています。 df1とdf2のsome_colに同じ値(たとえば[1,3]と[1,2,3])がない場合は、常にシャッフルが発生します。 – AlexanderLedovsky

関連する問題