Ошибка выдается, потому что вы не можете получить доступ к другому фрейму данных в udf другого. Самый простой способ исправить это - собрать фрейм данных, к которому вы хотите обратиться.
Другой вариант - перекрестное соединение, но по опыту я могу сказать, что сбор другого фрейма данных происходит быстрее. (У меня нет математики / статистики, чтобы подтвердить это)
так:
1. Соберите фрейм данных, который вы хотите использовать в формате udf.
2. Вызовите этот собранный фрейм данных (который теперь является списком) в вашем udf, теперь вы можете / должны использовать логику python, поскольку вы говорите со списком объектов
Примечание. Постарайтесь ограничить сбор данных до минимума, выберите только те столбцы, которые вам нужны
Обновление:
Если вы имеете дело с очень большим набором, который сделает сбор невозможным, кросс-соединение, скорее всего, теперь сработает (по крайней мере, для меня это не сработало). Проблема заключается в том, что для создания перекрестного произведения двух кадров данных потребуется так много времени, что для соединения с рабочим узлом истечет время ожидания, что приведет к ошибке широковещания. Посмотрите, можете ли вы каким-либо образом ограничить используемые вами столбцы или есть возможность отфильтровать строки, о которых вы точно знаете, что они не будут использоваться.
Если все это не удалось, посмотрите, можете ли вы создать какой-то пакетный подход *, поэтому запустите только первые X строк с собранными данными, если это будет сделано, загрузите следующие X строк. Скорее всего, это будет ужасно медленно, но, по крайней мере, это не истечет время ожидания (я думаю, я не пробовал это лично, так как в моем случае сбор был возможен)
* пакетирует и фрейм данных, на котором вы запускаете udf, и другой фрейм данных, так как вы все еще не можете собрать внутри udf, потому что вы не можете получить доступ к фрейму данных оттуда