Dataframe broadcast 関数またはSparkContext broadcast 関数を使用する場合、すべてのエグゼキューターにディスパッチできるオブジェクトの最大サイズはいくつですか?
broadcast
function:デフォルトは10MBですが、 spark.sql.autoBroadcastJoinThreshold で制御される300MBまで使用しました。
私の知る限り、それはすべて利用可能なメモリに依存します。したがって、これに対する明確な答えはありません。私が言うことは、それは大きなデータフレームよりも小さくなければならず、以下のように大きなまたは小さなデータフレームのサイズを見積もることができます...
import org.Apache.spark.util.SizeEstimator
logInfo(SizeEstimator.estimate(yourlargeorsmalldataframehere))
これに基づいて、broadcast
ヒントをフレームワークに渡すことができます。
scala doc from sql/execution/SparkStrategies.scala もご覧ください。
それは....
- ブロードキャスト:結合の片側の推定物理サイズがユーザー設定可能な[[SQLConf.AUTO_BROADCASTJOIN_THRESHOLD]]しきい値より小さい場合、またはその側に明示的なブロードキャストヒントがある場合(たとえば、ユーザーが
[[org.Apache.spark.sql.functions.broadcast()]]関数をDataFrameに追加)すると、結合のそのサイドがブロードキャストされ、反対側がストリームされ、シャッフルは行われません。
実行されました。両側がしきい値を下回っている場合は、小さい方をブロードキャストします。どちらも小さい場合、BHJは使用されません。- ハッシュ結合のシャッフル:単一のパーティションの平均サイズがハッシュテーブルを構築するのに十分小さい場合。
- ソートマージ:一致する結合キーがソート可能な場合。
- 結合キーがない場合、結合の実装は次の優先順位で選択されます:
- BroadcastNestedLoopJoin:結合の片側をブロードキャストできる場合
- CartesianProduct:内部結合用
- BroadcastNestedLoopJoin
other-configuration-options も見てください
SparkContext.broadcast
(TorrentBroadcast):ブロードキャスト共有変数にもプロパティspark.broadcast.blockSize=4M
があります。これについても、ハードコアの制限はありません...
詳細についてはpls。参照 TorrentBroadcast.scala
ただし、2 GBの問題はドキュメントで公式に宣言されていませんが、問題を確認することができます(ドキュメントでこの種の問題を確認することはできませんでした)。 plsは 「進行中」状態のSPARK-6235 & SPARK-6235_Design_V0.02.pdf を確認します。