Как я могу разделить pyspark RDD с функциями R

import rpy2.robjects as robjects

dffunc = sc.parallelize([(0,robjects.r.rnorm),(1,robjects.r.runif)])
dffunc.collect() 

Выходы

[(0, <rpy2.rinterface.SexpClosure - Python:0x7f2ecfc28618 / R:0x26abd18>), (1, <rpy2.rinterface.SexpClosure - Python:0x7f2ecfc283d8 / R:0x26aad28>)]

В то время как секционированная версия приводит к ошибке:

dffuncpart = dffunc.partitionBy(2)
dffuncpart.collect()
RuntimeError: ('R cannot evaluate code before being initialized.', <built-in function unserialize>

Кажется, эта ошибкаR не был загружен ни на один из разделов, что, как я предполагаю, означает, что первый шаг импорта не был выполнен. Есть ли что-нибудь вокруг этого?

РЕДАКТИРОВАТЬ 1 Этот второй пример заставляет меня думать, что есть ошибка во времени pyspark или rpy2.

dffunc = sc.parallelize([(0,robjects.r.rnorm),     (1,robjects.r.runif)]).partitionBy(2)
def loadmodel(model):
    import rpy2.robjects as robjects
    return model[1](2)
dffunc.map(loadmodel).collect()

Выдает ту же ошибку R не может оценить код до инициализации.

dffuncpickle = sc.parallelize([(0,pickle.dumps(robjects.r.rnorm)),(1,pickle.dumps(robjects.r.runif))]).partitionBy(2)
def loadmodelpickle(model):
    import rpy2.robjects as robjects
    import pickle
    return pickle.loads(model[1])(2)
dffuncpickle.map(loadmodelpickle).collect()

Работает так, как ожидалось.

Ответы на вопрос(1)

Ваш ответ на вопрос