带火花流的动态过滤器
Dynamic filters with spark-streaming
我在以下用例中使用 spark-streaming :
我有一个kafka主题——数据。从本主题开始,我使用结构化火花流传输实时数据并对其应用一些过滤器。如果应用过滤器后返回的行数大于 1,则输出为 1,否则输出为 0 以及查询中的一些其他数据。
简单来说,假设我正在使用 -
过滤流
df.filter($A < 10)
其中 "A"、“<”和“10”是动态的,来自某些数据库。实际上,这些值来自 kafka 主题,我正在使用和更新数据库中的这些值。所以查询不是静态的,会在一段时间后更新。
此外,我将不得不对流的结果应用一些布尔运算符。例如 -
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() 调用来实现导致消息包含在输出流中的完整条件集。
我在以下用例中使用 spark-streaming :
我有一个kafka主题——数据。从本主题开始,我使用结构化火花流传输实时数据并对其应用一些过滤器。如果应用过滤器后返回的行数大于 1,则输出为 1,否则输出为 0 以及查询中的一些其他数据。
简单来说,假设我正在使用 -
过滤流df.filter($A < 10)
其中 "A"、“<”和“10”是动态的,来自某些数据库。实际上,这些值来自 kafka 主题,我正在使用和更新数据库中的这些值。所以查询不是静态的,会在一段时间后更新。
此外,我将不得不对流的结果应用一些布尔运算符。例如 -
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() 调用来实现导致消息包含在输出流中的完整条件集。