带火花流的动态过滤器

Dynamic filters with spark-streaming

我在以下用例中使用 spark-streaming :

  1. 我有一个kafka主题——数据。从本主题开始,我使用结构化火花流传输实时数据并对其应用一些过滤器。如果应用过滤器后返回的行数大于 1,则输出为 1,否则输出为 0 以及查询中的一些其他数据。

    简单来说,假设我正在使用 -

    过滤流
    df.filter($A < 10) 
    

    其中 "A"、“<”和“10”是动态的,来自某些数据库。实际上,这些值来自 kafka 主题,我正在使用和更新数据库中的这些值。所以查询不是静态的,会在一段时间后更新。

  2. 此外,我将不得不对流的结果应用一些布尔运算符。例如 -

    df.filter($A < 10) AND df.filter($B = 1) OR df.filter($C > 1)... and so on
    

    此处,每个原子操作(如 df.filter($A < 10))returns 如上所述为 0 或 1。 最终结果保存到mongo.

我想知道是否可以使用结构化火花流来解决这两个问题。如果不是,那么使用 RDD ?

否则,有人可以建议任何方法吗?

对于第一种情况,您可以使用 this answer. I've also had good luck using a per-executor transient value that was periodically refetched in each executor as described in the second part of 中所述的基于广播变量的方法。

对于第二种情况,您将使用单个 filter() 调用来实现导致消息包含在输出流中的完整条件集。