我需要根据收到的输入内容有条件地处理我的数据。该应用程序是一个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());
请查看并提出您的意见!
答案 0 :(得分:0)
为什么不使用过滤器,然后根据需要使用不同的writeStreams。 我认为这将是一个更好的方法。 另外,您将能够更好地处理每个流查询。 谢谢!