partitionBy
関数がデータを分割することを理解しています。 rdd.partitionBy(100)
を使用すると、キーによってデータが100の部分に分割されます。つまり、類似したキーに関連付けられたデータはグループ化されます
ここに簡単な答えはありません。すべてはデータの量と利用可能なリソースに依存します。 パーティションが多すぎる または少なすぎると、パフォーマンスが低下します。
いくつかのリソース は、パーティションの数は利用可能なコアの数の約2倍でなければならないと主張しています。一方、1つのパーティションには通常128MBを超えることはできず、1つのシャッフルブロックは2GBを超えることはできません( SPARK-6235 を参照)。
最後に、潜在的なデータスキューを修正する必要があります。データセットで一部のキーが過剰に表現されていると、リソースの使用が最適化されず、失敗する可能性があります。
いいえ、または少なくとも直接ではありません。 keyBy
メソッドを使用して、RDDを必要な形式に変換できます。さらに、任意のPythonオブジェクトはキーと値のペアとして扱うことができます。これは、長さIterable
のように動作させる必要なメソッドを実装している限り オブジェクトがPySparkで有効なキーと値のペアであるかどうかを判断する方法 を参照してください。
Tuple
は有効です。引用するには Python用語集 :
オブジェクトは、その存続期間中に変更されないハッシュ値(
__hash__()
メソッドが必要)があり、他のオブジェクトと比較できる(__eq__()
メソッドが必要)場合、ハッシュ可能です。 。等しいと比較するハッシュ可能なオブジェクトは、同じハッシュ値を持つ必要があります。