2015-10-22 8 views
7

私はHDFSからデータを取り出してSpark RDDに保存しています。 Sparkは、HDFSブロックの数に基づいてパーティションの数を作成します。これにより、配管中に処理される多数の空の区画が生じる。このオーバーヘッドを取り除くために、RDDからすべての空のパーティションを除外します。私は合体と再パーティションを認識していますが、すべての空のパーティションが削除されるという保証はありません。Spark RDDから空のパーティションを削除します

これについて他の方法はありますか?

+0

"*これは、配管中に処理される多数の空のパーティションにつながります。*"私はこの文を理解していません。なぜこの空のパーティションが作成されるのですか? –

+0

Hiveを使用してデータをフェッチしていて、hdfsに500個のファイルブロックがあると仮定すると、RDDに500個のパーティションが作成されます。後でgroupbykeyを実行している間に、空のパーティションが残されます。 – user3898179

+1

データについて先験的なことがある場合は、 'RangePartitioner'または' HashPartitioner'のいずれかを使って再分割することができます。そうでない場合は、乱数に基づいてパーティションを使用できます。 – zero323

答えて

1

RDDから空のパーティションを削除する簡単な方法はありません。

​​3210は、空のパーティションが削除されることを保証しません。 40個の空のパーティションと10個のパーティションのデータを持つRDDがある場合は、rdd.coalesce(45)の後も空のパーティションが残ります。

repartitionメソッドは、すべてのパーティションにわたってデータを均等に分割するため、空のパーティションはありません。 50個のブランクパーティションと10個のパーティション(データあり)を持つRDDがあり、rdd.repartition(20)を実行すると、データは20個のパーティションに均等に分割されます。

関連する問題