Я пытаюсь обновить столбец данных на основе сложных вычислений (внутри метода внутри класса). Из того, что я узнал до сих пор, вы можете обновлять столбцы в фреймах данных, используя пользовательские функции. К сожалению, пользовательские функции должны иметь статус c. Есть ли обходной путь?
Вот соответствующая часть моего кода:
'''
Louvain Community Detection Algoritm
'''
class LouvainCommunityDetection():
def __init__(self, graph):
self.graph = graph
self.changeInModularity = True
self.changeCommunityIdUDF = udf(LouvainCommunityDetection.changeCommunityId, IntegerType())
@staticmethod
def changeCommunityId(col):
newCommunityId = 123
# here I should compute the newCommunityId using complex operations
# involving other methods in this class
# like self.computeModularityGain
# but since this is a static method... I can't use those
return newCommunityId
def louvain(self):
oldModularity = 0 # since intially each node represents a community
# retrieve graph vertices and edges dataframes
verticesDf = self.graph.vertices
edgesDf = self.graph.edges
canOptimize = True
while canOptimize:
while self.changeInModularity:
self.changeInModularity = False
verticesDf = verticesDf.select('id', 'tweetCreated', 'userId', 'userName', 'parentId', self.changeCommunityIdUDF('communityId').alias('udfResult'))
verticesDf.show()
self.changeInModularity = False
canOptimize = False