带火花流的动态过滤器

时间:2018-07-10 06:43:19

标签: mongodb apache-spark apache-kafka spark-streaming

在以下用例中,我正在使用火花流:

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

    简而言之,假设我正在使用-

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

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

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

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

    在这里,每个原子操作(如df.filter($ A <10))如上所述返回0或1。 最终结果保存到mongo。

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

否则,有人可以提出任何建议吗?

1 个答案:

答案 0 :(得分:0)

对于第一种情况,您可以使用基于广播变量的方法,如this answer中所述。我还很幸运地使用了每个执行者的瞬态值,该值在this answer的第二部分中介绍了在每个执行者中定期重新获取的情况。

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