scala - 使用 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|
+--------------------+
|[, , , , , , , , ...|
+--------------------+
解决方案
推荐阅读
- python - 如何将 dataclass_json 中的 field_name 选项用于嵌套字典
- css - 带有可滚动 tbody 的引导响应表?
- azure - 用于特定权限集的 Blob 存储的 Azure 角色
- react-native - 从 NativeBase v2 迁移到 v3 时出现问题
- java - FreeMarker 如何将变量传递给另一个变量?
- listview - ListView中如何控制编辑控件的位置
- c# - C# 不可调用成员“ProdhimiQumështit.DataTabel”不能像方法一样使用
- cypress - cypress-cucumber - 将值从一步定义传递到另一步定义
- c# - .net 核心中间件创建中 next(context) 与 await next.Invoke(context) 之间的区别
- c# - 向数组添加元素有效,但未显示在其他 switch 语句中