特定のRDDの各パーティションサイズを見つける最良の方法は何ですか。歪んだパーティションの問題をデバッグしようとしています。これを試しました。
_l = builder.rdd.glom().map(len).collect() # get length of each partition
print('Min Parition Size: ',min(l),'. Max Parition Size: ', max(l),'. Avg Parition Size: ', sum(l)/len(l),'. Total Partitions: ', len(l))
_
小さいRDDの場合は正常に機能しますが、大きいRDDの場合は、OOMエラーが発生します。私の考えは、glom()
がこれを引き起こしているということです。しかしとにかく、それを行うためのより良い方法があるかどうかを知りたいだけですか?
使用する:
builder.rdd.mapPartitions(lambda it: [sum(1 for _ in it)])
@LostInOverflowによる回答はうまく機能しますが。以下のコードを使用して、各パーティションのサイズとインデックスを見つける別の方法を見つけました。おかげで この素晴らしい投稿。
コードは次のとおりです。
l = test_join.rdd.mapPartitionsWithIndex(lambda x,it: [(x,sum(1 for _ in it))]).collect()
次に、次のコードを使用して、最大サイズと最小サイズのパーティションを取得できます。
min(l,key=lambda item:item[1])
max(l,key=lambda item:item[1])
歪んだパーティションのキーを見つけたら、必要に応じて、そのパーティションのコンテンツをさらにデバッグできます。