在我的构造函数中,我初始化一个空字典然后在udf中使用从批处理中获得的新数据更新它。
我的问题是,在每个新批次中,字典再次为空。
如何绕过空步骤,以便新批次可以访问我已在字典中添加的所有先前值?
import CharacteristicVector
import update_charecteristic_vector
class SomeClass(object):
def __init__(self):
self.grid_list = {}
def run_stream(self):
def update_grid_list(grid):
if grid not in self.grid_list:
grid_list[grid] =
if grid not in self.grid_list:
self.grid_list[grid] = CharacteristicVector()
self.grid_list[grid] = update_charecteristic_vector(self.grid_list[grid])
return self.grid_list[grid].Density
.
.
.
udf_update_grid_list = udf(update_grid_list, StringType())
grids_dataframe = hashed.select(
hashed.grid.alias('grid'),
update_list(hashed.grid).alias('Density')
)
query = grids_dataframe.writeStream.format("console").start()
query.awaitTermination()
答案 0 :(得分:2)
不幸的是,由于多种原因,此代码无法运行。即使是单批处理或批处理应用程序,它也只有在只有活动的Python工作进程时才能工作。此外,通常不可能具有全局同步的统计信息,并且支持读取和写入。
您应该能够使用stateful transformations,但目前只支持Java / Scala,并且界面仍处于实验/演变阶段。
根据您的要求,您可以尝试在内存数据网格,键值存储或分布式缓存中使用。