web-dev-qa-db-ja.com

Sparkのブロードキャストオブジェクトの最大サイズはいくつですか?

Dataframe broadcast 関数またはSparkContext broadcast 関数を使用する場合、すべてのエグゼキューターにディスパッチできるオブジェクトの最大サイズはいくつですか?

10
Kirk Broadhurst

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-6235SPARK-6235_Design_V0.02.pdf を確認します。

13
Ram Ghadiyaram