問題タブ [partitioner]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - 「Exchange ハッシュパーティショニング」はスパークでどのように機能していますか
Predicate Pushdown を含む Spark を介して後でこれらのファイルを要求する利点を得るために、寄木細工のファイルに並べ替えて書き込みたいデータセットがあります。
現在、列ごとの再分割とパーティションの数を使用して、データを特定のパーティションに移動しました。列は、対応するパーティション (0 から (固定) n まで) を識別します。その結果、scala/spark は予期しない結果を生成し、作成されるパーティションが少なくなります (一部は空です)。たぶんハッシュ衝突?
問題を解決するために、理由を見つけようとし、回避策を見つけようとしました。データフレームをrddに変換し、HashPartitionerでpartitionByを使用することで、1つの回避策を見つけました。驚いたことに、期待通りの結果が得られました。しかし、データフレームを RDD に変換することは、私にとっては解決策ではありません。リソースが多すぎるためです。
この環境をテストしました
cloudera CDH 5.9.3 上の SPARK 2.0
emr-5.17.0 の SPARK 2.3.1
これが出力を使用した私のテストです。Spark-shell を使用して実行してください
HashPartitioner がデータフレームを再分割する方法で使用されていることを最初に知りましたが、RDD で動作しているため、そうではないようです。
この「Exchange hashpartitioning」(上記の出力の説明を参照) がどのように機能するかを誰かが教えてくれますか?
2019-01-16 12:20: これはHow does HashPartitioner work?の複製ではありません。整数列の列 (+ パーティション数) による再分割のハッシュ アルゴリズムに興味があるためです。ソース コードからわかるように、一般的な HashPartitioner は期待どおりに機能しています。