2016-03-13 14 views
7

私はpartitionBy関数が私のデータを分割することを理解します。 rdd.partitionBy(100)を使用すると、キーでデータを100個に分割します。類似したキーに関連付けられたデータがまとめてグループ化されますパーティションバイナリを使用したパーティション分割データ

  1. 私の理解は正しいですか?
  2. 利用可能なコア数に等しいパーティション数を使用することをお勧めしますか?処理がより効率的になりますか?
  3. 私のデータがキー値形式でない場合はどうなりますか?私はまだこの機能を使用できますか?
  4. 私のデータは、serial_number_of_student、student_nameと言うことができます。この のケースでは、 serial_numberではなくstudent_nameでデータを分割できますか?

答えて

9
  1. 正確ではない。 Spark、PySpark、is by default using hash partitioningを含む。同一のキーを除いて、単一のパーティションに割り当てられたキー間には、実際の類似点はありません。
  2. ここでは簡単な答えはありません。すべてのデータ量と利用可能なリソースに依存します。 Too largeまたはパーティション数が少なすぎると、パフォーマンスが低下します。

    Some resourcesは、利用可能なコアの数の約2倍の大きさでなければならないと主張しています。一方、1つのパーティションには通常128MBを超える容量が含まれてはならず、1つのシャッフルブロックは2GBを超えることはできません(SPARK-6235参照)。

    最後に、潜在的なデータスキューを修正する必要があります。一部のキーがデータセットで過剰表現されていると、最適でないリソースが使用され、失敗する可能性があります。

  3. いいえ、または少なくとも直接ではありません。 keyByメソッドを使用して、RDDを必要な形式に変換することができます。さらに、すべてのPythonオブジェクトは、長さが2の等しいIterableのように動作する必要なメソッドを実装している限り、のキーと値のペアとして扱うことができます。 How to determine if object is a valid key-value pair in PySpark

  4. 種類によって異なります。キーがハッシュ可能な限り *である限り。通常、不変構造でなければならず、その中に含まれるすべての値も不変でなければなりません。たとえば、a list is not a valid keyですが、tupleの整数です。 Python glossaryを引用する

オブジェクトは、その寿命の間に変化しないハッシュ値を持つ場合(それは__hash__()方法を必要とする)ハッシュ可能であり、他のオブジェクトと比較することができます(__eq__()メソッドが必要です)。等しいを比較するハッシュ可能オブジェクトは、同じハッシュ値を持たなければなりません。

-1

私は最近、partitionbyを使用しました。私がしたことは、私が同じパーティションに入れたいすべてのものが同じ鍵を持っているようにデータを再構成することでした。同じ鍵がデータの値です。私のデータはディクショナリのリストでした。私は辞書のキーでタプルに変換しました。最初は同じパーティションに同じキーを置いていませんでした。しかし、その後、私はキーが文字列であることを認識しました。私はそれらをintにキャストします。しかし、問題は続いた。数字は非常に大きかった。私はこれらの数値を小さな数値にマッピングしていました。だから私の持ち去りは、キーが小さな整数でなければならないということでした。

+0

この答えを確認するには、多くのタイプミスがあります。 –

関連する問題