Я хочу, чтобы каждый рабочий-python запускал R-оболочку с помощью rpy2. Могу ли я это сделать на каком-то этапе настройки, аналогично тому, как я предполагаю, что это произойдет, когда вы импортируете модуль Python, который будет использоваться для последующих задач-исполнителей? Например:Могу ли я подключить внешний (R) процесс к каждому работнику pyspark во время установки
import numpy as np
df.mapPartitions(lambda x: np.zeros(x))
В моем случае я хочу, чтобы вместо того, чтобы начать R оболочку на каждом исполнитель и импорт R библиотеке, которая будет выглядеть примерно так:
import rpy2.robjects as robjects
from rpy2.robjects.packages import importr
rlibrary = importr('testrlibrary')
df.mapPartitions(lambda x: rlibrary.rfunc(x))
Но я не хочу этого чтобы произойти внутри вызова до mapPartitions
, потому что тогда это произойдет на уровне задачи, а не один раз на ядро исполнителя. Этот подход работает и больше похож на приведенный ниже пример, но не полезен для меня.
def model(partition):
import rpy2.robjects as robjects
from rpy2.robjects.packages import importr
rlibrary = importr('testrlibrary')
rlibrary.rfunc(partition)
df.mapPartitions(model)
См. Соответствующий вопрос здесь: [Как я могу разделить pyspark RDDs, удерживающие функции R] (http://stackoverflow.com/questions/34669751/) – retrocookie