Я использую pyspark для обработки своих данных, и в самом конце мне нужно собрать данные из rdd, используя rdd.collect(). Однако у меня искра вылетает из-за проблемы с памятью. Я пробовал несколько способов, но не повезло. Сейчас я работаю со следующим кодом, обрабатываю небольшой фрагмент данных для каждого раздела:
def make_part_filter(index):
def part_filter(split_index, iterator):
if split_index == index:
for el in iterator:
yield el
return part_filter
for part_id in range(rdd.getNumPartitions()):
part_rdd = rdd.mapPartitionsWithIndex(make_part_filter(part_id), True)
myCollection = part_rdd.collect()
for row in myCollection:
#Do something with each row
Новый код, который я сейчас использую, не дает сбоев, а кажется, что он работает вечно.
Есть ли лучший способ собрать данные с большого rdd?