在pyspark中将Python模块发送到其他节点
我该如何将用C语言编译的模块(比如python-Levenshtein)发送到每个Spark集群中的节点呢?
我知道可以通过独立的Python脚本在Spark中发送Python文件(下面是示例代码):
from pyspark import SparkContext
sc = SparkContext("local", "App Name", pyFiles=['MyFile.py', 'MyOtherFile.py'])
但是在没有'.py'文件的情况下,我该如何发送这个模块呢?
2 个回答
49
如果你能把你的模块打包成一个 .egg
或 .zip
文件,那么在创建你的 SparkContext 时,你应该能在 pyFiles
中看到它(或者你也可以稍后通过 sc.addPyFile 来添加它)。
对于使用 setuptools 的 Python 库,你可以运行 python setup.py bdist_egg
来生成一个 egg 格式的分发包。
另外一个选择是将库安装到整个集群中,你可以在每台机器上使用 pip 或 easy_install,或者通过共享一个 Python 安装在集群的文件系统上(比如 NFS)来实现。