5

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() を使用する必要はないと思います。.orderBy() のみです。問題は、これがパフォーマンスの低下を引き起こすように見えることです。ウィンドウ関数なしでこれを達成する別の方法はありますか?

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

A,1
B,1
A,1
C,1
D,1

私はしたくない。

4

1 に答える 1

7

質問に与えられた情報を考えると、せいぜいウィンドウ関数でパーティションを定義する方法のスケルトンを提供できます。

from pyspark.sql.window import Window

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

これは、次の SQL と同等です。

OVER (PARTITION BY ... ORDER BY …)

したがって、パーティショニング仕様について:

指定された行と同じパーティションにどの行が含まれるかを制御します。フレームを並べ替えて計算する前に、パーティション列に同じ値を持つすべての行が同じマシンに収集されていることを確認したい場合があります。

パーティション指定を指定しない場合、すべてのデータを 1 台のマシンに収集する必要があるため、次のエラー メッセージが表示されます。

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.
于 2016-04-05T20:17:46.850 に答える