【发布时间】:2015-09-14 14:07:01
【问题描述】:
我已经编写了一个在 python 中实现分类器的类。我想使用 Apache Spark 使用这个分类器并行化大量数据点的分类。
- 我在一个有 10 个从属服务器的集群上使用 Amazon EC2 进行设置,基于一个带有 python 的 Anaconda 发行版的 ami。 ami 让我可以远程使用 IPython Notebook。
- 我已经在 /root/anaconda/lib/python2.7/ 文件夹中的 master 上的一个名为 BoTree.py 的文件中定义了 BoTree 类,这是我所有 python 模块所在的位置
- 我检查了在从 master 运行命令行 spark 时我可以导入和使用 BoTree.py(我只需从编写 import BoTree 开始,我的类 BoTree 就可用了
- 我使用 spark 的 /root/spark-ec2/copy-dir.sh 脚本在我的集群中复制 /python2.7/ 目录。
- 我已经 ssh-ed 到其中一个从属服务器并尝试在那里运行 ipython,并且能够导入 BoTree,所以我认为该模块已成功通过集群发送(我还可以看到 BoTree.py 文件在.../python2.7/ 文件夹)
- 在我检查过的主服务器上,我可以使用 cPickle 腌制和取消腌制 BoTree 实例,据我所知,这是 pyspark 的序列化程序。
但是,当我执行以下操作时:
import BoTree
bo_tree = BoTree.train(data)
rdd = sc.parallelize(keyed_training_points) #create rdd of 10 (integer, (float, float) tuples
rdd = rdd.mapValues(lambda point, bt = bo_tree: bt.classify(point[0], point[1]))
out = rdd.collect()
Spark 因错误而失败(我认为只是相关位):
File "/root/spark/python/pyspark/worker.py", line 90, in main
command = pickleSer.loads(command.value)
File "/root/spark/python/pyspark/serializers.py", line 405, in loads
return cPickle.loads(obj)
ImportError: No module named BoroughTree
谁能帮帮我?有点绝望……
谢谢
【问题讨论】:
标签: python apache-spark python-module pyspark