【发布时间】:2020-12-15 14:02:07
【问题描述】:
我有一个连接到 ActiveMQ 的火花结构应用程序。应用程序接收来自主题的消息。这些消息采用 StringXML 的形式。我想从这个嵌套 XML 中提取信息。我该怎么做?
我提到了this post,但无法在 Scala 中实现类似的东西。
XML 格式:
<CofiResults>
<ExecutionTime>20201103153839</ExecutionTime>
<FilterClass>S </FilterClass>
<InputData format="something" id="someID"><ns2:FrdReq xmlns:ns2="http://someone.com">
<HeaderSegment xmlns="https://somelink.com">
<Version>6</Version>
<SequenceNb>1</SequenceNb>
</HeaderSegment>
.
.
.
我的代码:
val df = spark.readStream
.format("org.apache.bahir.sql.streaming.mqtt.MQTTStreamSourceProvider")
.option("brokerUrl", brokerUrl_)
.option("topic", topicName_)
.option("persistence", "memory")
.option("cleanSession", "true")
.option("username", username_)
.option("password", password_)
.load()
val payload_ = df.select('payload cast "string") // This payload IS the XMLString
现在我需要从上述XML中提取ExecutionTime、Version等字段。
【问题讨论】:
-
使用
import xml.etree.ElementTree我对 Scala 还很陌生......并且不知道如何做到这一点 -
在spark sql中使用xpath怎么样?spark.apache.org/docs/latest/api/sql/#xpath
-
您能解释一下如何在 UDF 中使用它吗?谢谢
-
对不起,我的意思是
spark.sql("select xpath(payload, <xpathquery>) from dataframe")。 payload 是 xml 字符串列 -
非常感谢...在将数据帧转换为 tempTable 然后运行 sql 命令后,它工作正常
标签: apache-spark spark-structured-streaming