Пользовательские функции Python не рекомендуются с точки зрения производительности, но нет ничего плохого в том, чтобы использовать их при необходимости, как в этом случае: затраты на сериализацию / десериализацию, вероятно, смешны по сравнению с ожиданиями ввода-вывода, введенными вашим send
.Так что, вероятно, нет смысла удалять UDF.
В более общем случае есть два способа, с помощью которых вы можете уменьшить объем используемой памяти при обработке кадра данных.Один из них, о котором вы уже упоминали, - это сохранение в файл и обработка файла.
Другой способ - использование toLocalIterator на вашем фрейме данных.Таким образом, вы будете выполнять итерацию на каждом из разделов информационного кадра: вы можете перераспределить информационный кадр, чтобы сделать разделы произвольного размера:
df =df.repartition(100)
for partition in df.toLocalIterator():
for row in partition:
send(row)
Таким образом ваши требования к локальной памяти уменьшатся до самого большого раздела вашего разделенного на разделы информационного кадра..