Dask client.upload_file()用于嵌套模块

Dask client.upload_file()用于嵌套模块,dask,dask-distributed,Dask,Dask Distributed,我有一个项目结构如下 - topmodule/ - childmodule1/ - my_func1.py - childmodule2/ - my_func2.py - common.py - __init__.py client = Client(YarnCluster()) client.submit(MyFuncClass1.execute) 在Dask集群边缘节点上的Jupyter笔记本中,我正在执行以下操作 from topm

我有一个项目结构如下

- topmodule/
   - childmodule1/
      -  my_func1.py
   - childmodule2/
      -  my_func2.py
   - common.py
   - __init__.py

client = Client(YarnCluster())
client.submit(MyFuncClass1.execute)
在Dask集群边缘节点上的Jupyter笔记本中,我正在执行以下操作

from topmodule.childmodule1.my_func1 import MyFuncClass1
from topmodule.childmodule2.my_func2 import MyFuncClass2

然后我创建了一个分布式客户机&发送工作如下

- topmodule/
   - childmodule1/
      -  my_func1.py
   - childmodule2/
      -  my_func2.py
   - common.py
   - __init__.py

client = Client(YarnCluster())
client.submit(MyFuncClass1.execute)
这会出错,因为工人没有topmodule的文件

"/mnt1/yarn/usercache/hadoop/appcache/application_1572459480364_0007/container_1572459480364_0007_01_000003/environment/lib/python3.7/site-packages/distributed/protocol/pickle.py", line 59, in loads return pickle.loads(x) ModuleNotFoundError: No module named 'topmodule'
所以我试着做的是——我试着上传“topmodule”下的每个文件。直接位于“topmodule”下的文件似乎可以上传,但嵌套的文件不能。下面是我所说的

代码:

控制台输出:

topmodule/common.py # processes fine 
topmodule/__init__.py # processes fine 
topmodule/childmodule1/my_func1.py # throws error

回溯:


---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-13-dbf487d43120> in <module>
      3 for filename in Path('nodes').rglob('*.py'):
      4     print(filename)
----> 5     client.upload_file(filename)

~/miniconda/lib/python3.7/site-packages/distributed/client.py in upload_file(self, filename, **kwargs)
   2929         )
   2930         if isinstance(result, Exception):
-> 2931             raise result
   2932         else:
   2933             return result

ModuleNotFoundError: No module named 'topmodule'

---------------------------------------------------------------------------
ModuleNotFoundError回溯(上次最近调用)
在里面
3表示路径('nodes').rglob('*.py')中的文件名:
4打印(文件名)
---->5.client.upload_文件(文件名)
上传文件中的~/miniconda/lib/python3.7/site-packages/distributed/client.py(self,filename,**kwargs)
2929         )
2930如果存在(结果、异常):
->2931提高成绩
2932其他:
2933返回结果
ModuleNotFoundError:没有名为“topmodule”的模块
我的问题是-如何将整个模块及其文件上载到workers?我们的模块很大,所以我想避免仅仅为了这个问题而对其进行重组,除非我们构建模块的方式存在根本性缺陷


或者-是否有更好的方法让所有dask工作人员了解模块(可能是从git存储库中了解模块?

当您分别对每个文件调用upload\u file时,您将丢失模块的目录结构

如果你想上传一个更全面的模块,你可以将你的模块打包成zip或egg文件并上传


我们也遇到了类似的问题-这可能是因为
纱线客户端
无法加载/访问嵌套模块。@JosephBerry我明白了。。。我认为从一个特定的GitRepo安装pip是一个好主意。我们的回购协议是在亚马逊AWS上托管的——我会试试看这是否有效……我确实尝试过zip方法。但是导入语句不起作用。我登录到一个worker节点,并验证压缩后的目录是否位于dask worker空间位置下。压缩目录是否应该放在其他地方?我使用的是一个准绳(AmazonEMR)。