Apache spark 如何通过Spark streaming动态应用模式
我有一个接收SOAP消息的web服务,在XJC的帮助下,我能够将这些消息部分转换为POJO,然后使用kafka json序列化程序将所述消息发送给kafka 我现在正在尝试使用卡夫卡流式传输消息,然后最终将其保存到数据湖 要求至少对数据池中的数据具有某种结构。然而,由于最初的模式是在2个循环依赖的XSD中给出的,因此我还没有找到一个解决方案来解决如何在数据流中应用结构的问题。我知道根据一批消息推断出一个模式,但目前我并没有足够的样本数据Apache spark 如何通过Spark streaming动态应用模式,apache-spark,soap,apache-kafka,spark-structured-streaming,Apache Spark,Soap,Apache Kafka,Spark Structured Streaming,我有一个接收SOAP消息的web服务,在XJC的帮助下,我能够将这些消息部分转换为POJO,然后使用kafka json序列化程序将所述消息发送给kafka 我现在正在尝试使用卡夫卡流式传输消息,然后最终将其保存到数据湖 要求至少对数据池中的数据具有某种结构。然而,由于最初的模式是在2个循环依赖的XSD中给出的,因此我还没有找到一个解决方案来解决如何在数据流中应用结构的问题。我知道根据一批消息推断出一个模式,但目前我并没有足够的样本数据 需要注意的一点是,消息因原始模式而异,因为它具有元素,因此
需要注意的一点是,消息因原始模式而异,因为它具有
元素,因此每条消息可能不相同。鉴于上述限制,我如何实现对这些数据的结构化?我没有想到要附加任何代码,因为这更像是一个攻击计划,而不是目前代码的问题。希望这是在指导方针和有人可以帮助我把这个项目进行。提前谢谢 如果您真的想要一个定义良好、不断发展的模式,可以很好地与Datalakes(HDFS、S3等)配合使用,我建议您不要使用JSON。您甚至可以使用当前使用的JSON而不是JSON
Avro不是Kafka的要求,但这也将使您更容易地使用Kafka Connect框架写入HDFS或S3,并使用诸如Hive/Presto/SparkSQL之类的SQL工具查询这些数据。Kafka Connect在这里更受欢迎,因为实际上不需要编写流式代码
如果您想使用XML和XSD模式,请看transformer
我遇到过的具有良好XML支持的Datalake ETL的其他替代方案是NiFi和Streamset 感谢@cricket_007,不幸的是,尽管我不喜欢xsd和xml,但源数据是根据这些要求定义和传输的,因此,挑战在于找到一种能够在转换数据时利用kafka的解决方案。有没有一种方法可以直接从xml/xsd中定义avro格式的模式?根据我的理解,使用我回答中的插件(我没有使用,所以YMMV),可以直接将xml字符串发送到Kafka,然后从中转换为内部结构Kafka Connect对象。然后,您可以使用
AvroConverter
(通过汇合),然后将其转换为Avro。NiFi/Streamset也可以通过自己的内部数据格式/转换器/处理器完成类似的工作。这里的要点-Spark不是唯一可用的选项,我个人建议不要在这里通过编写自己的代码来重新发明轮子