首页 > 解决方案 > 使用 Spark Scala 将数据转换为 MAP,如何?

问题描述

我的环境是 Spark 2.1 和 Scala。

将以下日志转换为 DF 的最佳方法是什么?

[<c id="1-ew34f-4" t="7/15/2018 8:45:00 PM"><d>
<nv n="key1" v="0" />
<nv n="Key2" v="0" />
<nv n="Key3" v="144" />
<nv n="Key4" v="" />
</d></c>]

我的预期输出是

+----+-----+-------+---------+
|Key1| Key2| Key3  | Key4    |  
|0   | 0   |  144  | Null    |
+----+-----+-------+---------+

我试过了

str.map(x=>x.replace("<nv n=","(").replace(" ","" ).replace("v=",",").replace("/>","#/>").replace ("#",")").replace("</d></c>","").replace("><d>","").split("/>").toMap)

但得到了

error: Cannot prove that String <:< (T, U)

提前致谢

更新:

我尝试了 spark-xml_2.10-0.2.0 并发现所有值都为空。

scala> val data= sqlContext.read.format("com.databricks.spark.xml").option("inferschema","true").option("rowTag","d").load("file:///home/cloudera/data/rawdata")
data: org.apache.spark.sql.DataFrame = [nv: array<string>]

scala> data.show
+--------------------+
|                  nv|
+--------------------+
|[, , , , , , , , ...|
+--------------------+

标签: scalaapache-sparkloggingtransformation

解决方案


推荐阅读