Я пишу библиотеку Python, которая будет вызываться кодом pyspark.В составе этой библиотеки есть медленная функция.
Я бы хотел кэшировать результаты этой функции, чтобы таблица хранилась в памяти.(По крайней мере у каждого работника).
Например:
def slow_function(x):
time.sleep(10)
return x*2
class CacheSlowFunction():
def __init__(self):
self.values = {}
def slow_function(x):
if x in self.values:
return self.values[x]
else:
res = slow_function(x)
self.values[x] = res
return res
def main(x):
csf = CacheSlowFunction()
s = 0
for i in range(x):
s += csf.slow_function(i)
return s
и код вызывается из spark с чем-то вроде:
map(main, [i for i in range(10000)])
Теперь код создасттаблица (self.values
) для каждого звонка.Возможно ли, чтобы эта таблица была хотя бы разделена между вычислениями, выполненными на одном и том же работнике?