私が書いたら
dataFrame.write.format("parquet").mode("append").save("temp.parquet")
temp.parquetフォルダーで、行番号と同じファイル番号を取得しました
私は寄木細工について完全に理解していないと思いますが、それは自然ですか?
coalesce
beforewrite操作を使用します
dataFrame.coalesce(1).write.format("parquet").mode("append").save("temp.parquet")
EDIT-1
よく見ると、 docs はcoalesce
について警告しています
ただし、抜本的な合体を行っている場合は、 numPartitions = 1に変更すると、計算が必要なノードよりも少ないノードで行われる可能性があります(たとえば、numPartitions = 1の場合は1つのノード)
したがって、 @ Amar のように、 repartition
を使用することをお勧めします
以前の回答は正しいものですが、単一パーティションへの再パーティション化または合体後に生じる影響を理解する必要があります。すべてのデータは、すぐに単一のファイルに書き込むために、単一のワーカーに転送する必要があります。
インターネット全体で繰り返し言及されているように、実行計画に追加されるシャッフルステップにもかかわらず、このシナリオではrepartition
を使用する必要があります。このステップは、ファイルを順番にマージする代わりに、クラスターのパワーを使用するのに役立ちます。
言及する価値のある代替案が少なくとも1つあります。すべてのファイルを単一のファイルにマージする簡単なスクリプトを作成できます。そうすれば、クラスターの単一ノードへの大量のネットワークトラフィックを生成することを回避できます。
パーティションを1に設定して、単一ファイルとして保存できます
dataFrame.write.repartitions(1).format("parquet").mode("append").save("temp.parquet")