0

PySparkのWindow関数のパーティションを設定するには?私はPySparkジョブを実行している、と私は、次のメッセージが出てい

WARN org.apache.spark.sql.execution.Window: No Partition Defined for Window operation! Moving all data to a single partition, this can cause serious performance degradation. 

メッセージは何を示しんし、どのように私は、ウィンドウの操作のためのパーティションを定義していますか?

編集:

私は列全体をランク付けしようとしています。

私のデータは以下のように構成されています

A 
B 
A 
C 
D 

そして、私が欲しい:

A,1 
B,3 
A,1 
C,4 
D,5 

私は.partitionBy(BYそこべきだと思いません)このため、のみ.orderBy()。問題は、これがパフォーマンスの低下を引き起こすように見えるということです。ウィンドウ機能なしでこれを達成する別の方法はありますか?

私は最初の列で分割する場合、結果は次のようになります。

私はしたくない
A,1 
B,1 
A,1 
C,1 
D,1 

+0

の回答の一つはあなたの問題を解決するかどうか、受け入れてください。それで私たちはこの質問を閉じることができます! – eliasah

+0

申し訳ありませんが、答えがまだ解決策を提供していません。 – cshin9

+0

@ cshin9まあ、実際には既存の答えはあなたの質問にちょうど対処しています。パーティショニングを効率化することなくウィンドウ機能を発揮できる特別な魔法はありません。 – zero323

答えて

2

質問に与えられた情報は、せいぜい私はパーティションがウィンドウ関数で定義されるべきかについてsqueletonを提供することができます考える:

OVER (PARTITION BY ... ORDER BY …) 

from pyspark.sql.window import Window 

windowSpec = \ 
    Window \ 
    .partitionBy(...) \ # Here is where you define partitioning 
    .orderBy(…) 

これは、以下のSQLと等価です

したがって、パーティションの指定に関しては、与えられた行と同じパーティションにある行が制御されます: フレームを注文して計算する前に、パーティション列と同じ値を持つすべての行が同じマシンに収集されていることを確認することをお勧めします。これ

あなたが任意のパーティションの仕様を与えていない場合は、すべてのデータを単一のマシンに収集する必要があります、次のエラーメッセージ:

WARN org.apache.spark.sql.execution.Window: No Partition Defined for Window operation! Moving all data to a single partition, this can cause serious performance degradation. 
+1

テーブル全体で注文し、.partitionBy()を使用しない場合はどうすればよいですか?より効率的な方法がありますか? (つまり、RANK()OVER(ORDER BY ...) – cshin9

+1

唯一の効率的な方法はpartitionByです! – eliasah

+2

テーブル全体をランキングする場合はどうすればよいでしょうかパーティションは、各パーティションのランク付けを別々にしたいことを意味します – cshin9

関連する問題