Я написал скрипт Spark, который зависит от six
и различных других пакетов python.Управление зависимостями на python с искрою на google cloud dataproc
$ cat ./test_package/__init__.py
from six.moves.urllib.request import urlopen
def download_size(url):
return len(urlopen(url).read())
Как таковой, я написал setup.py
, который утверждает такую зависимость.
$ cat ./setup.py
from setuptools import setup
setup(
name="Test App",
packages=['test_package'],
version="0.1",
install_requires=['six>=1.0'],
Тогда в моей искрового сценарий, у меня есть код, который требуется пакет
$ cat spark_script.py
#!/usr/lib/spark/bin/spark-submit
from pyspark import SparkContext
from glob import glob
from test_package import download_size
sc = SparkContext()
sc.addPyFile(glob('dist/Test_App-*.egg')[0])
...
sc.parallelize(urls).map(download_size).collect()
Если я бегу
$ ./test.py
Он отлично работает. Однако, если я пытаюсь использовать python3,
$ PYSPARK_PYTHON=python3 ./test.py
Главный узел способен импортировать test_package
, но в середине MapReduce я получаю это на каждом узле работника:
File "/hadoop/yarn/nm-local-dir/usercache/sam/appcache/application_1487279780844_0041/container_1487279780844_0041_01_000003/pyspark.zip/pyspark/serializers.py", line 419, in loads
return pickle.loads(obj, encoding=encoding)
File "./Test_App-0.1-py2.7.egg/test_package/__init__.py", line 2, in <module>
from six.moves.urllib.request import urlopen
ImportError: No module named 'six'
Как я управлять зависимостями python с облачным источником данных, установленным в Google cloud-пакете Apache?
«Вы только вручную установили дополнительные пакеты python», однако файл яиц добавлен в контекст искры с помощью sc_addPyFile (glob ('dist/Test_App - *. Egg') [0]) 'и' setup.py' перечисляет необходимые пакеты, поэтому я ожидаю, что каждый рабочий получит, распакует и установит файл яйца. Почему это происходит только с python 2? – charmoniumQ
Является ли упаковка зависимостей python в файле яйца более элегантным решением, чем запуск сценария оболочки конфигурации на каждой машине? Казалось бы, так. Дайте мне знать, если вы чувствуете себя иначе. – charmoniumQ