Spark Structured Streaming - 新批次上的空字典

时间:2018-01-06 20:43:45

标签: python apache-spark dictionary pyspark spark-structured-streaming

在我的构造函数中,我初始化一个空字典然后在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()

1 个答案:

答案 0 :(得分:2)

不幸的是,由于多种原因,此代码无法运行。即使是单批处理或批处理应用程序,它也只有在只有活动的Python工作进程时才能工作。此外,通常不可能具有全局同步的统计信息,并且支持读取和写入。

您应该能够使用stateful transformations,但目前只支持Java / Scala,并且界面仍处于实验/演变阶段。

根据您的要求,您可以尝试在内存数据网格,键值存储或分布式缓存中使用。