Spark Java-流数据的条件逻辑-需求批判

时间:2019-07-20 07:44:00

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

我需要根据收到的输入内容有条件地处理我的数据。该应用程序是一个Spark(2.3.4)结构化流应用程序,可读取Kafka源(2.3.0)。我可以成功读取数据,获取数据,进行解析等等。

根据消息包含的数据,我需要进行进一步的处理。我在下面的代码中列出了一种可行的方法,并且需要进行严格的评估,以查看这是最好的方法还是另外一种更好的方法。

下面列出的工作方法。根据该消息,我需要进行许多进一步的转换,还将各种转换后的输出保存到数据库中,最后在csv或json中提供答案。

//raw streaming data from kafka here
Dataset<String> values = dsRawData
                    .selectExpr("CAST(value AS STRING)")
                    .as(Encoders.STRING());

//conditional processing check here
Dataset<String> csvIn = values 
                    .map((MapFunction<String, String>) se -> {
                        String[] controls = se.split(",");
                        secoreLog.info(logHeader+"controls: " + controls[0]);

                        if(controls[0].equals("magic1") && controls[1].equals("magic2") &&
                                controls[2].equals("magic2") && controls[3].equals("magic1")){
                            //trigger transformations & writes
                        }
                        else {
                            //trigger a different set of transformations & writes
                        }

                        return controls.toString();
                    }, Encoders.STRING());

请查看并提出您的意见!

1 个答案:

答案 0 :(得分:0)

为什么不使用过滤器,然后根据需要使用不同的writeStreams。 我认为这将是一个更好的方法。 另外,您将能够更好地处理每个流查询。 谢谢!