web-dev-qa-db-ja.com

Spark DataFrame Repartition and Parquet Partition

  1. 列の再パーティション化を使用して、データを寄木細工の床に格納しています。しかし、私はそれを理解していません。寄木細工のパーティション化されたファイルの数はnoと同じではありません。 Rddパーティションの。 RDDパーティションとパーケットパーティションの間に相関関係はありませんか?

  2. パーケットパーティションにデータを書き込み、Rdd再パーティションを使用してから、パーケットパーティションからデータを読み取る場合、読み取り/書き込み中にrddパーティション番号が同じになる条件はありますか?

  3. 列IDを使用してデータフレームをバケット化し、同じ列IDを介してデータフレームを再パーティション化するのはどう違うのですか?

  4. Sparkでの結合のパフォーマンスを考慮しながら、バケット化または再パーティション化(または両方)を検討する必要があります)

4
Ayan Biswas

ここであなたが求めているいくつかのこと-データのパーティション化、バケット化、バランシング、

パーティショニング:

  1. データのパーティション分割は、負荷を水平に分散するためによく使用されます。これにはパフォーマンス上の利点があり、データを論理的に編成するのに役立ちます。
  2. テーブルを分割すると、永続化されたデータの構造が変わり、この分割構造を反映したサブディレクトリが作成されます。
  3. これにより、クエリのパフォーマンスが劇的に向上しますが、パーティション分割スキームが一般的なフィルタリングを反映している場合のみです。

Sparkでは、これはdf.write.partitionedBy(column*)によって行われ、columnsを同じサブディレクトリに分割することでデータをグループ化します。

バケット:

  1. バケット化は、データセットをより管理しやすい部分に分解するもう1つの手法です。提供された列に基づいて、データ全体がユーザー定義の数のバケット(ファイル)にハッシュされます。
  2. Hiveの_Distribute By_と同義

Sparkでは、これはdf.write.bucketBy(n, column*)によって行われ、columnsを同じファイルに分割することによってデータをグループ化します。生成されるファイルの数はnによって制御されます

パーティション:

  1. これは、与えられたパーティション式に基づいて、与えられた数の内部ファイルに均等にバランスされた新しいDataFrameを返します。結果のDataFrameはハッシュ分割されます。
  2. Sparkはこれらのパーティション上のデータを管理し、実行者間でデータを送信するための最小限のネットワークトラフィックで分散データ処理を並列化するのに役立ちます。

Sparkでは、これはdf.repartition(n, column*)によって行われ、columnsを同じ内部パーティションファイルにパーティション分割することでデータをグループ化します。データはストレージに永続化されないことに注意してください。これは、bucketByと同様の制約に基づくデータの内部バランシングにすぎません

Tl; dr

1)データを寄木細工の床に格納するために列の再分割を使用しています。しかし、私はそれを理解していません。寄木細工のパーティション化されたファイルの数はnoと同じではありません。 Rddパーティションの。 RDDパーティションと寄木細工パーティションの間に相関関係はありませんか?

  • repartitionには、partitionedByではなくbucketByとの相関があります。パーティション化されたファイルは、_spark.sql.shuffle.partitions_や_spark.default.parallelism_などの他の構成によって管理されます

2)データを寄木細工のパーティションに書き込み、Rdd再パーティションを使用してから、データを寄木細工のパーティションから読み取る場合、読み取り/書き込み中にrddパーティション番号が同じになる条件がありますか? ?

  • 読み取り時、パーティションの数は_spark.default.parallelism_に等しくなります

3)どのように列IDを使用してデータフレームをバケット化し、同じ列IDを介してデータフレームを再分割するのですか?

  • バケット化は書き込み操作であり、永続化に使用されることを除いて、同様に機能します。

4)Sparkの結合のパフォーマンスを考慮しながら、バケット化または再パーティション化(または両方)を検討する必要があります)

  • 両方のデータセットのrepartitionがメモリにあり、一方または両方のデータセットが永続化されている場合は、bucketByも調べます。
10
Chitral Verma