2015-09-14 2 views
1

У меня есть класс с именем some_class() в файле Python здесь:Передача функций класса в PySpark РДУ

/some-folder/app/bin/file.py 

Я ввожу его в свой код здесь:

/some-folder2/app/code/file2.py 

По

import sys 
sys.path.append('/some-folder/app/bin') 
from file import some_class 

clss = some_class() 

Я хочу использовать функцию этого класса с именем some_function в карте искры

sc.parallelize(some_data_iterator).map(lambda x: clss.some_function(x)) 

Это дает мне ошибку:

No module named file 

While class.some_function, когда я называю его пределами карты функция pyspark, т.е., как правило, но не в РДУ pySpark в. Я думаю, что это как-то связано с pyspark. Я понятия не имею, где я ошибаюсь.

Я пробовал трансляцию этого класса и все еще не работал.

ответ

4

Всего Python зависимости должны быть либо присутствовать на пути поиска рабочих узлов или распределяются вручную, используя SparkContext.addPyFile метод так что-то вроде этого следует сделать трюк:

sc.addPyFile("/some-folder/app/bin/file.py") 

Он будет копировать файл на все работников и место в рабочем каталоге.

На боковой ноте, пожалуйста, не используйте file как имя модуля, даже если это только пример. Затенение встроенных функций в Python - не очень хорошая идея.

+0

Есть ли способ добавить папку в путь вместо одного файла – mousecoder

+0

addPyFile может принимать файл 'zip'. Вы можете закрепить все дерево исходных текстов, а затем добавить его с помощью addPyFile. – KSR