xml - 在scala中将XML元素解析为Dataframe
问题描述
我在使用 Spark 的 Scala 中对 SOAP 请求有一个 xml 响应,我想将其转换为 Dataframe,以便将其附加到配置单元表中。
我试过 databricks.spark.xml 但它只能直接加载 xml 文件。我无法找到加载 xml 变量(Elem)的方法
输入:
<XML>
<hol_cal date="2019-01-01" Desc="New Year's Day"/>
<hol_cal date="2019-04-19" Desc="Good Friday"/>
<hol_cal date="2019-04-22" Desc="Easter Monday"/>
...
...
...
</XML>
输出:数据框:
|日期 |Desc | |2019-01-01|元旦| |2019-04-19|耶稣受难日 | ……
解决方案
我会使用以下方法:
- 将文件读入 RDD(其中每个元素现在由 XML 文件中的一行组成)
val rawXML = sc.textFile(inputFileLocation)
- 创建一个案例类模式,如下所示:
case class DateSchema(date: String, desc: String)
- 将每一行转换为 DateSchema 案例类的一个元素。您可能希望首先过滤掉其中不包含“date”和“Desc”字符串的行。
val parsedXML = rawXML.filter(row => row.contains("date") && row.contains("Desc")).map(row => {
val splitRow = row.split("\"")
DateSchema(splitRow(1), splitRow(3))
})
- 使用 .toDF 将此 RDD 转换为数据帧
val dateDF = parsedXML.toDF
dateDF.show
+----------+--------------+
| date| desc|
+----------+--------------+
|2019-01-01|New Year's Day|
|2019-04-19| Good Friday|
|2019-04-22| Easter Monday|
+----------+--------------+
推荐阅读
- c# - C# 获取特殊字符前的空白位置
- typescript - 如何从流中创建打字稿对象
- javascript - 在 html5-qrcode.min.js 上选择后置摄像头
- jenkins - 如何使用 Jenkins 中的凭据克隆 bitbucket 源代码存储库
- c# - WPF 无法使密码框元素的角变圆
- javascript - js中的这个排序功能是如何工作的?
- php - 对使用 memcache 感到困惑并比较哪种解决方案更好
- python-3.x - 如何在 Python 中连接变量加 os.enviorn 路径加 yaml
- python - 我有嵌套列表,找到最大成本的任务,但如果两个成本相同,则只保留一个重量较低的,并找到第二高的成本
- flexbox - 将 Flexbox 'ul' 容器内的所有 'li' 图像设置为相同的固定大小