Как правильно использовать модули в rdd.map с pyspark - PullRequest
0 голосов
/ 24 сентября 2018

Как видно из заголовка, я пытаюсь создать внешние модули, которые впоследствии импортируются и запускаются в простой функции rdd.map.Пример ниже:

## main.py ##
myrdd = spark.sparkContext.parallelize([1,2,3,4,5])
spark.sparkContext.addPyFile("myModule.py")

import myModule as mm

myrdd.map(lambda x: mm.Module.test(x)).collect()

## myModule.py ##
class Module():
    def test(self,x):
       return x * 2

При попытке запустить это с помощью spark submit я получаю следующую ошибку:

test() missing 1 required positional argument: 'x'

Может кто-нибудь указать на ошибку?

Спасиботы очень

1 Ответ

0 голосов
/ 24 сентября 2018

test () не является методом класса, поэтому вы не можете вызывать Module.test (x) напрямую.

Вместо этого создайте объект Module и вызовите для него метод test (), как показано ниже:

myrdd = spark.sparkContext.parallelize([1,2,3,4,5])
spark.sparkContext.addPyFile("myModule.py")
import myModule as mm

myrdd.map(lambda x: mm.Module().test(x)).collect()
[2, 4, 6, 8, 10]
...