列の再パーティション化を使用して、データを寄木細工の床に格納しています。しかし、私はそれを理解していません。寄木細工のパーティション化されたファイルの数はnoと同じではありません。 Rddパーティションの。 RDDパーティションとパーケットパーティションの間に相関関係はありませんか?
パーケットパーティションにデータを書き込み、Rdd再パーティションを使用してから、パーケットパーティションからデータを読み取る場合、読み取り/書き込み中にrddパーティション番号が同じになる条件はありますか?
列IDを使用してデータフレームをバケット化し、同じ列IDを介してデータフレームを再パーティション化するのはどう違うのですか?
Sparkでの結合のパフォーマンスを考慮しながら、バケット化または再パーティション化(または両方)を検討する必要があります)
ここであなたが求めているいくつかのこと-データのパーティション化、バケット化、バランシング、
パーティショニング:
Sparkでは、これはdf.write.partitionedBy(column*)
によって行われ、columns
を同じサブディレクトリに分割することでデータをグループ化します。
バケット:
Distribute By
_と同義Sparkでは、これはdf.write.bucketBy(n, column*)
によって行われ、columns
を同じファイルに分割することによってデータをグループ化します。生成されるファイルの数はn
によって制御されます
パーティション:
DataFrame
を返します。結果のDataFrameはハッシュ分割されます。Sparkでは、これはdf.repartition(n, column*)
によって行われ、columns
を同じ内部パーティションファイルにパーティション分割することでデータをグループ化します。データはストレージに永続化されないことに注意してください。これは、bucketBy
と同様の制約に基づくデータの内部バランシングにすぎません
Tl; dr
1)データを寄木細工の床に格納するために列の再分割を使用しています。しかし、私はそれを理解していません。寄木細工のパーティション化されたファイルの数はnoと同じではありません。 Rddパーティションの。 RDDパーティションと寄木細工パーティションの間に相関関係はありませんか?
spark.sql.shuffle.partitions
_や_spark.default.parallelism
_などの他の構成によって管理されます2)データを寄木細工のパーティションに書き込み、Rdd再パーティションを使用してから、データを寄木細工のパーティションから読み取る場合、読み取り/書き込み中にrddパーティション番号が同じになる条件がありますか? ?
spark.default.parallelism
_に等しくなります3)どのように列IDを使用してデータフレームをバケット化し、同じ列IDを介してデータフレームを再分割するのですか?
4)Sparkの結合のパフォーマンスを考慮しながら、バケット化または再パーティション化(または両方)を検討する必要があります)
repartition
がメモリにあり、一方または両方のデータセットが永続化されている場合は、bucketBy
も調べます。