scala - 将 RDD[(String,Map[String,Int])] 展平为 RDD[String,String,Int]
问题描述
我正在尝试将 RDD[(String,Map[String,Int])] 展平为 RDD[String,String,Int] 并最终将其保存为数据框。
val rdd=hashedContent.map(f=>(f._1,f._2.flatMap(x=> (x._1, x._2))))
val rdd=hashedContent.map(f=>(f._1,f._2.flatMap(x=>x)))
都有类型不匹配错误。关于如何展平这样的结构有什么帮助吗?编辑:
hashedContent -- ("A", Map("acs"->2, "sdv"->2, "sfd"->1)),
("B", Map("ass"->2, "fvv"->2, "ffd"->1)),
("c", Map("dg"->2, "vd"->2, "dgr"->1))
解决方案
你很接近:
rdd.flatMap(x => x._2.map(y => (x._1, y._1, y._2)))
.toDF()
.show()
+---+---+---+
| _1| _2| _3|
+---+---+---+
| A|acs| 2|
| A|sdv| 2|
| A|sfd| 1|
| B|ass| 2|
| B|fvv| 2|
| B|ffd| 1|
| c| dg| 2|
| c| vd| 2|
| c|dgr| 1|
+---+---+---+
数据
val data = Seq(("A", Map("acs"->2, "sdv"->2, "sfd"->1)),
("B", Map("ass"->2, "fvv"->2, "ffd"->1)),
("c", Map("dg"->2, "vd"->2, "dgr"->1)))
val rdd = sc.parallelize(data)
推荐阅读
- java - GSON 在运行 toJSON 时导致 StackOverFlow 错误
- python - 遍历列表并按顺序将每个元素附加到一组新列表
- react-admin - 如何将 key.value 数组映射到 Chip?我有一个 {k,v} 地图列表
- postgresql - PostgreSQL:使用字符串和变量创建外部表
- node.js - 有没有一种简单的方法可以使用 Node/PostgreSQL 对任何类型的文件进行简单的文件上传?
- python - Django 页面限制(管理员和成员可以看到)
- javascript - FullCalendar 不会更改语言
- node.js - 无法通过winapi获取窗口截图
- javascript - javascript eval() 函数的参数
- c++ - 是 std::transform SIMD 功能吗?