【发布时间】:2018-10-28 14:43:54
【问题描述】:
我创建了一个类,用于分析我生成的特定类型的数据。我在本地计算机上使用这个类,但偶尔有太多数据无法在本地工作,所以我想为其中一种方法添加一个选项,以便它可以将作业提交到计算机集群。除了我正在努力将类方法转移到集群之外,它大部分都有效。
我的班级是这样的
class Analysis():
def __init__(self, INPUT_PARAMETERS ETC):
self.data
OTHER_STUFF...
@staticmethod
def staticMethod1(input1, input2):
# PERFORM SOME KIND OF CALCULATION ON INPUT1 AND INPUT2 AND RETURN THE RESULT
return output
@staticmethod
def staticMethod2(input1, input2):
# PERFORM SOME KIND OF CALCULATION ON INPUT1 AND INPUT2 AND RETURN THE RESULT
return output
# MORE STATIC METHODS
@staticmethod
def staticMethodN(input1, input2):
# PERFORM SOME KIND OF CALCULATION ON INPUT1 AND INPUT2 AND RETURN THE RESULT
return output
def createArray(self, function):
# CREATE AN ARRAY BY APPLYING FUNCTION TO SELF.DATA
return array
所以createArray 方法被调用并且用户传递应该用于计算数组的静态方法。当我希望在集群上创建createArray 中的数组时,我使用dill.dump 将静态方法(传递给此方法,例如staticMethod1)保存到Pickle 文件中。然后将Pickle 文件传递给集群,但是当我尝试从Pickle 文件加载方法时,它显示ModuleNotFoundError: No module named 'analysis',这是可以在其中找到Analysis 类的模块。
我真的需要在集群上重新创建整个类才能使用静态方法吗?任何人都可以建议一个优雅的解决这个问题或建议一个更好的方法来实现这个功能吗?它需要使用任何静态方法。仅供参考,其中一种静态方法使用from sklearn.metrics.cluster import adjusted_rand_score,以防可能影响使用dill 的解决方案。
【问题讨论】: