Ответ 1
Использование:
builder.rdd.mapPartitions(lambda it: [sum(1 for _ in it)])
Какой лучший способ найти размер каждого раздела для данного 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])
Поиск ключа перекошенного раздела, мы можем дополнительно отладить содержимое этого раздела, если это необходимо.