"
假设mongodb中有一个“商品”集合,如下所示:
{name:""A"",attr:[""location"":""us""],""eventTime"":""2018-01-01""}
{name:""B"",attr:[""brand"":""nike""],""eventTime"":""2018-01-01""}
在过去,我使用spark来压扁它并保存到hive:
goodsDF.select($""name"",explode($""attribute""))
但是,现在我们需要处理增量数据,例如,第二天第三行有一个新的商品
{name:""A"",attr:[""location"":""us""],""eventTime"":""2018-01-01""}
{name:""B"",attr:[""brand"":""nike""],""eventTime"":""2018-01-01""}
{name:""C"",attr:[""location"":""uk""],""eventTime"":""2018-02-01""}
我们的一些团队认为flink在流媒体上更好,因为flink有事件驱动应用程序,流管道和批处理,但spark只是微批。
所以我们改为使用flink,但是有很多代码已经由spark编写,例如上面的“explosion”,所以我的问题是:是否可以使用flink来获取源并保存到接收器,但是在中间,使用spark来转换数据集?
如果不可能的话,如何将它保存到临时接收器,让我们说,一些json文件,然后spark读取文件并转换并保存到hive.But我担心这没有意义,因为对于spark,它也是增量数据。使用flink然后使用spark就像直接使用spark Structured Streaming一样。"
"不能在没有对代码进行更改的情况下在Flink中使用Apache Spark代码。由于这两者是不同的处理框架和由两个提供的API,它的语法彼此不同。框架的选择应该由用例驱动,而不是像Flink那样通用语句比Spark更好。框架可能对你的用例很有用,并且在其他用例中可能表现不佳。顺便说一句,Spark不仅仅是微批。它有批量,流媒体,图形,ML和其他东西。由于没有提到完整的用例,因此很难说明哪种情况更适合这种情况。但是,如果你的用例可以提供亚秒级延迟,那么我不会浪费时间转移到另一个框架。
此外,如果事物是动态的并且预计处理框架将来可能会发生变化,那么最好使用像apache beam这样的东西来提供大多数处理引擎的抽象。使用apache beam处理API可以让您随时灵活地更改底层处理引擎。以下是阅读更多关于beam的链接 - https://beam.apache.org/。"
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。